Comment convertir en hexadécimal rgb en Java?

Comment puis-je convertir la couleur hexadécimale en code RVB en Java? Sur Google, la plupart des exemples concernent la conversion de RVB en hexadécimal.

Je suppose que cela devrait le faire:

/** * * @param colorStr eg "#FFFFFF" * @return */ public static Color hex2Rgb(Ssortingng colorStr) { return new Color( Integer.valueOf( colorStr.subssortingng( 1, 3 ), 16 ), Integer.valueOf( colorStr.subssortingng( 3, 5 ), 16 ), Integer.valueOf( colorStr.subssortingng( 5, 7 ), 16 ) ); } 

En fait, il existe un moyen plus simple de le faire:

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

Pour le développement Android , j’utilise:

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

Voici une version qui gère à la fois les versions RGB et RGBA:

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

Un code de couleur hexadécimal est #RRGGBB

RR, GG, BB sont des valeurs hexadécimales allant de 0 à 255

Appelons RR XY où X et Y sont des caractères hexadécimaux 0-9A-F, A = 10, F = 15

La valeur décimale est X * 16 + Y

Si RR = B7, la décimale pour B est 11, donc la valeur est 11 * 16 + 7 = 183

 public int[] getRGB(Ssortingng 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; } 

vous pouvez le faire simplement comme ci-dessous:

  public static int[] getRGB(final Ssortingng 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; } 

Par exemple

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

Convertissez-le en nombre entier, puis divisez-le deux fois par 16, 256, 4096 ou 65536 en fonction de la longueur de la chaîne hexadécimale originale (3, 6, 9 ou 12 respectivement).

Les codes de couleur hexadécimaux sont déjà rgb. Le format est #RRGGBB

Pour élaborer la réponse fournie @xhh, vous pouvez append le rouge, le vert et le bleu pour formater votre chaîne en tant que “rgb (0,0,0)” avant de la renvoyer.

 /** * * @param colorStr eg "#FFFFFF" * @return Ssortingng - formatted "rgb(0,0,0)" */ public static Ssortingng hex2Rgb(Ssortingng colorStr) { Color c = new Color( Integer.valueOf(hexSsortingng.subssortingng(1, 3), 16), Integer.valueOf(hexSsortingng.subssortingng(3, 5), 16), Integer.valueOf(hexSsortingng.subssortingng(5, 7), 16)); SsortingngBuffer sb = new SsortingngBuffer(); sb.append("rgb("); sb.append(c.getRed()); sb.append(","); sb.append(c.getGreen()); sb.append(","); sb.append(c.getBlue()); sb.append(")"); return sb.toSsortingng(); } 

Beaucoup de ces solutions fonctionnent, mais c’est une alternative.

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

Si vous n’ajoutez pas 4278190080 (# FF000000) la couleur a un alpha de 0 et ne sera pas affichée.

Voici une autre version plus rapide qui gère les versions RGBA:

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

Pour JavaFX

 import javafx.scene.paint.Color; 

.

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

L’autre jour, j’ai résolu le problème similaire et j’ai trouvé pratique de convertir la chaîne de couleur hexadécimale en tableau int [alpha, r, g, b]:

  /** * Hex color ssortingng to int[] array converter * * @param hexARGB should be color hex ssortingng: #AARRGGBB or #RRGGBB * @return int[] array: [alpha, r, g, b] * @throws IllegalArgumentException */ public static int[] hexSsortingngToARGB(Ssortingng hexARGB) throws IllegalArgumentException { if (!hexARGB.startsWith("#") || !(hexARGB.length() == 7 || hexARGB.length() == 9)) { throw new IllegalArgumentException("Hex color ssortingng is incorrect!"); } int[] intARGB = new int[4]; if (hexARGB.length() == 9) { intARGB[0] = Integer.valueOf(hexARGB.subssortingng(1, 3), 16); // alpha intARGB[1] = Integer.valueOf(hexARGB.subssortingng(3, 5), 16); // red intARGB[2] = Integer.valueOf(hexARGB.subssortingng(5, 7), 16); // green intARGB[3] = Integer.valueOf(hexARGB.subssortingng(7), 16); // blue } else hexSsortingngToARGB("#FF" + hexARGB.subssortingng(1)); return intARGB; } 

Si vous ne souhaitez pas utiliser AWT Color.decode, copiez simplement le contenu de la méthode:

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

Integer.decode gère le # ou 0x, selon la façon dont votre chaîne est formatée