2012-05-05 19 views
5

Mam kilka suwaków w mojej aplikacji, które pozwalają użytkownikowi zmieniać kolory ARGB, ale muszę przekonwertować te wartości na wartość szesnastkową, taką jak 0xff000000, która jest jednolita czarna.Konwertuj wartości RGBA na kod koloru szesnastkowego

To, co mam tak daleko:

protected int toHex(Color col) { 
    String as = pad(Integer.toHexString(col.getAlpha())); 
    String rs = pad(Integer.toHexString(col.getRed())); 
    String gs = pad(Integer.toHexString(col.getGreen())); 
    String bs = pad(Integer.toHexString(col.getBlue())); 
    String hex = "0x" + as + rs + gs + bs; 
    return Integer.parseInt(hex, 16); 
} 

private static final String pad(String s) { 
    return (s.length() == 1) ? "0" + s : s; 
} 

Jednak po uzyskaniu wartość całkowita jak poniżej, otrzymuję NumberFormatException do ciągu wejściowego: „0xccffffff”:

int color = toHex(new Color(153f, 153f, 153f, 0.80f)); 

jakieś pomysły na jak uzyskać to do liczby całkowitej? Dzięki.

Odpowiedz

4

Parametry koloru muszą być zmienne między 1f i 0f. To jest poprawny kolor:

int color = toHex(new Color(1f, 1f, 1f, 1f)); 

Który jest biały.

+0

Ah, dzięki. Rozumiem to teraz. Używam Slick do moich fontów i zmieniłem kolor na java.awt.Color. – Kaikz

0

Problem polega na tym, że dodajesz wartości alfa. Twój maksymalny kod koloru to #FFFFFFFF (8 cyfr).

Metoda Integer.parseInt pozwala przeanalizować wartość z -0x80000000 na 0x7FFFFFFF. Aby uzyskać z tego wartość o wartości 0xCC999999, należałoby zanegować wartość i wprowadzić -0x33666667 - co oczywiście nie jest w ogóle użyteczne.

Przylegające, ale stabilne obejście używa się: Long.

(int) Long.parseLong(text, 16)