Como converter hex para rgb usando Java?

Como posso converter cor hexadecimal para código RGB em Java? Principalmente no Google, os exemplos são sobre como converter de RGB para hexadecimal.

Eu acho que isso deveria ser feito:

/** * * @param colorStr eg "#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 ) ); } 

Na verdade, há uma maneira mais fácil (incorporada) de fazer isso:

 Color.decode("#FFCCEE"); 
 public static void main(String[] args) { int hex = 0x123456; int r = (hex & 0xFF0000) >> 16; int g = (hex & 0xFF00) >> 8; int b = (hex & 0xFF); } 

Para o desenvolvimento do Android , eu uso:

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

Aqui está uma versão que lida com as versões RGB e RGBA:

 /** * Converts a hex string to a color. If it can't be converted null is returned. * @param hex (ie #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; } 

Um código de cor hexadecimal é #RRGGBB

RR, GG, BB são valores hexadecimais que variam de 0 a 255

Vamos chamar RR XY onde X e Y são caracteres hexadecimais 0-9A-F, A = 10, F = 15

O valor decimal é X * 16 + Y

Se RR = B7, o decimal para B é 11, então o valor é 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; } 

você pode fazer isso simplesmente como abaixo:

  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 exemplo

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

Converta-o em um inteiro e, em seguida, divmod-lo duas vezes por 16, 256, 4096 ou 65536, dependendo do comprimento da seqüência hexagonal original (3, 6, 9 ou 12, respectivamente).

Códigos de colors hexadecimais já são rgb. O formato é #RRGGBB

Para elaborar a resposta @xhh fornecida, você pode append o vermelho, o verde e o azul para formatar sua sequência como “rgb (0,0,0)” antes de retorná-la.

 /** * * @param colorStr eg "#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(); } 

Muitas dessas soluções funcionam, mas isso é uma alternativa.

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

Se você não adicionar 4278190080 (# FF000000), a cor terá um Alfa de 0 e não será exibida.

Aqui está outra versão mais rápida que lida com versões RGBA:

 public static int hexToIntColor(String hex){ int Alpha = Integer.valueOf(hex.substring(0, 2), 16); int Red = Integer.valueOf(hex.substring(2, 4), 16); int Green = Integer.valueOf(hex.substring(4, 6), 16); int Blue = Integer.valueOf(hex.substring(6, 8), 16); Alpha = (Alpha << 24) & 0xFF000000; Red = (Red << 16) & 0x00FF0000; Green = (Green << 8) & 0x0000FF00; Blue = Blue & 0x000000FF; return Alpha | Red | Green | Blue; } 

Para o JavaFX

 import javafx.scene.paint.Color; 

.

 Color whiteColor = Color.valueOf("#ffffff"); 

No outro dia eu estava resolvendo o problema semelhante e achei conveniente converter a sequência de colors hexadecimais em int array [alpha, 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; } 

Se você não quiser usar o AWT Color.decode, basta copiar o conteúdo do método:

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

Integer.decode manipula o # ou o 0x, dependendo de como sua string é formatada