2012-05-05 58 views
5

Tengo algunos controles deslizantes en mi aplicación que permiten al usuario cambiar los colores ARGB, sin embargo, necesito convertir estos valores a un valor hexadecimal como 0xff000000, que es negro sólido.Convertir valores RGBA a código de color hexadecimal

Esto es lo que tengo hasta ahora:

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

Sin embargo al llegar al valor entero, como a continuación, aparece un NumberFormatException para la cadena de entrada: "0xccffffff":

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

alguna idea sobre cómo hacer esto en un Entero? Gracias.

Respuesta

4

Los parámetros de color deben ser flotantes entre 1f y 0f. Entonces este es un color válido:

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

Cual es blanco.

+0

Ah, gracias. Lo tengo ordenado ahora. Estoy usando Slick para mis cosas de fuentes y ahora he cambiado el Color a java.awt.Color. – Kaikz

0

El problema es que está incluyendo valores alfa. Por lo tanto, su código de color máximo es #FFFFFFFF (8 dígitos).

El método Integer.parseInt le permitirá analizar el valor de -0x80000000 a 0x7FFFFFFF. Para obtener su valor 0xCC999999, deberá negar el valor e ingresar -0x33666667, lo cual, por supuesto, no es útil en absoluto.

La solución torpe pero estable es usar Long.

(int) Long.parseLong(text, 16) 
Cuestiones relacionadas