2012-05-05 9 views
5

Nella mia applicazione ho alcuni dispositivi di scorrimento che consentono all'utente di modificare i colori ARGB, tuttavia è necessario convertire questi valori in un valore esadecimale come 0xff000000, che è nero pieno.Converti valori RGBA in codice esadecimale colore

Questo è quello che ho finora:

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; 
} 

Tuttavia su come raggiungere il valore intero come qui di seguito, ho un NumberFormatException per stringa di input: "0xccffffff":

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

Tutte le idee su come ottenere questo ad un intero? Grazie.

risposta

4

I parametri Colore devono essere mobili tra 1f e 0f. Quindi questo è un colore valido:

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

Quale è bianco.

+0

Ah, grazie. Ho risolto ora. Sto usando Slick per i miei font e ora ho cambiato il colore in java.awt.Color. – Kaikz

0

Il problema è che si includono valori alfa. Quindi il codice colore massimo è #FFFFFFFF (8 cifre).

Il metodo Integer.parseInt consente di analizzare il valore da -0x80000000 a 0x7FFFFFFF. Per ottenere il valore 0xCC999999 da esso, si dovrebbe annullare il valore e immettere -0x33666667 - che ovviamente non è affatto utile.

La scomoda soluzione, ma stabile, utilizza Long.

(int) Long.parseLong(text, 16)