2010-11-09 29 views
63

¿Cómo puedo convertir el color hexadecimal a código RGB en Java? Sobre todo en Google, hay ejemplos sobre cómo convertir de RGB a hexadecimal.Cómo convertir de hex a rgb usando Java?

+0

¿Puede dar un ejemplo de lo que está tratando de convertir y de lo que está tratando de convertir? No está claro exactamente lo que estás tratando de hacer. – kkress

+0

000000 se convertirá a color negro rgb – user236501

Respuesta

137

supongo que esto debe hacerlo: código de color

/** 
* 
* @param colorStr e.g. "#FFFFFF" 
* @return 
*/ 
public static Color hex2Rgb(String colorStr) { 
    return new Color(
      Integer.valueOf(colorStr.substring(1, 3), 16), 
      Integer.valueOf(colorStr.substring(3, 5), 16), 
      Integer.valueOf(colorStr.substring(5, 7), 16)); 
} 
+0

Para aquellos que también desean una versión de 3 caracteres, tenga en cuenta que en el caso de 3 caracteres, cada valor debe ser * 255/16. Probé esto con "000", "aaa" y "fff", y todos funcionan correctamente. ahora. – Andrew

2

Conviértalo en un número entero, luego divmod it dos veces por 16, 256, 4096 o 65536 dependiendo de la longitud de la cadena hexagonal original (3, 6, 9 o 12, respectivamente).

1

Los códigos de color Hexidecimal ya son rgb. El formato es #RRGGBB

+3

A menos que sea #RGB, #RRRGGGBBB o #RRRRGGGGBBBB. –

32
public static void main(String[] args) { 
    int hex = 0x123456; 
    int r = (hex & 0xFF0000) >> 16; 
    int g = (hex & 0xFF00) >> 8; 
    int b = (hex & 0xFF); 
} 
4

Un hex es #RRGGBB

RR, GG y BB son valores hexadecimales que van 0-255

XY llamada RR de Let donde X e y son hex carácter 0-9A-F, A = 10, M = 15

El valor decimal es X * 1 6 + Y

Si RR = B7, el decimal para B es 11, por lo que el valor es 11 * 16 + 7 = 183

public int[] getRGB(String rgb){ 
    int[] ret = new int[3]; 
    for(int i=0; i<3; i++){ 
     ret[i] = hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1)); 
    } 
    return ret; 
} 

public int hexToInt(char a, char b){ 
    int x = a < 65 ? a-48 : a-55; 
    int y = b < 65 ? b-48 : b-55; 
    return x*16+y; 
} 
171

En realidad, hay una manera más fácil (incorporada) forma de hacer esto:

Color.decode("#FFCCEE"); 
+2

desafortunadamente eso es AWT:/ – wuppi

+2

@wuppi Creo que en realidad fue una buena noticia, ya que AWT está en JDK. ¿Qué tiene de desafortunado? –

+0

Eclipse RCP es SWT, con el que estaba trabajando. – wuppi

19

Para Android desarrollo, utilizo:

int color = Color.parseColor("#123456"); 
+0

Simplemente reemplaza el '#' con '0x' –

1

Para más detalles sobre º Responda @xhh siempre que pueda agregar el rojo, el verde y el azul para formatear su cadena como "rgb (0,0,0)" antes de devolverla.

/** 
* 
* @param colorStr e.g. "#FFFFFF" 
* @return String - formatted "rgb(0,0,0)" 
*/ 
public static String hex2Rgb(String colorStr) { 
    Color c = new Color(
     Integer.valueOf(hexString.substring(1, 3), 16), 
     Integer.valueOf(hexString.substring(3, 5), 16), 
     Integer.valueOf(hexString.substring(5, 7), 16)); 

    StringBuffer sb = new StringBuffer(); 
    sb.append("rgb("); 
    sb.append(c.getRed()); 
    sb.append(","); 
    sb.append(c.getGreen()); 
    sb.append(","); 
    sb.append(c.getBlue()); 
    sb.append(")"); 
    return sb.toString(); 
} 
3

puede hacerlo simplemente como a continuación:

public static int[] getRGB(final String rgb) 
{ 
    final int[] ret = new int[3]; 
    for (int i = 0; i < 3; i++) 
    { 
     ret[i] = Integer.parseInt(rgb.substring(i * 2, i * 2 + 2), 16); 
    } 
    return ret; 
} 

Por ejemplo

getRGB("444444") = 68,68,68 
getRGB("FFFFFF") = 255,255,255 
1

Muchas de estas soluciones funcionan, pero esto es una alternativa.

String hex="#00FF00"; // green 
long thisCol=Long.decode(hex)+4278190080L; 
int useColour=(int)thisCol; 

Si no añadir 4278190080 (# FF000000) el color tiene un Alfa de 0 y no se mostrará.

0

El otro día que había estado resolver el problema similar y se encontró conveniente para convertir la secuencia del color hex a int array [alfa, r, g, b]:

/** 
* Hex color string to int[] array converter 
* 
* @param hexARGB should be color hex string: #AARRGGBB or #RRGGBB 
* @return int[] array: [alpha, r, g, b] 
* @throws IllegalArgumentException 
*/ 

public static int[] hexStringToARGB(String hexARGB) throws IllegalArgumentException { 

    if (!hexARGB.startsWith("#") || !(hexARGB.length() == 7 || hexARGB.length() == 9)) { 

     throw new IllegalArgumentException("Hex color string is incorrect!"); 
    } 

    int[] intARGB = new int[4]; 

    if (hexARGB.length() == 9) { 
     intARGB[0] = Integer.valueOf(hexARGB.substring(1, 3), 16); // alpha 
     intARGB[1] = Integer.valueOf(hexARGB.substring(3, 5), 16); // red 
     intARGB[2] = Integer.valueOf(hexARGB.substring(5, 7), 16); // green 
     intARGB[3] = Integer.valueOf(hexARGB.substring(7), 16); // blue 
    } else hexStringToARGB("#FF" + hexARGB.substring(1)); 

    return intARGB; 
} 
3

Aquí es una versión que maneja tanto RGB y RGBA versiones:

/** 
* Converts a hex string to a color. If it can't be converted null is returned. 
* @param hex (i.e. #CCCCCCFF or CCCCCC) 
* @return Color 
*/ 
public static Color HexToColor(String hex) 
{ 
    hex = hex.replace("#", ""); 
    switch (hex.length()) { 
     case 6: 
      return new Color(
      Integer.valueOf(hex.substring(0, 2), 16), 
      Integer.valueOf(hex.substring(2, 4), 16), 
      Integer.valueOf(hex.substring(4, 6), 16)); 
     case 8: 
      return new Color(
      Integer.valueOf(hex.substring(0, 2), 16), 
      Integer.valueOf(hex.substring(2, 4), 16), 
      Integer.valueOf(hex.substring(4, 6), 16), 
      Integer.valueOf(hex.substring(6, 8), 16)); 
    } 
    return null; 
} 
0

Si no desea utilizar el AWT Color.decode, a continuación, sólo copiar el contenido del método:

int i = Integer.decode("#FFFFFF"); 
int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF}; 

Entero.decode maneja el # o 0x, dependiendo de cómo se formatee su cadena