Comment convertir une couleur hexadécimale en code RVB en Java? Surtout dans Google, des exemples portent sur la conversion de RVB en hexadécimal.
Je suppose que cela devrait le faire:
/**
*
* @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 ) );
}
En fait, il existe un moyen plus simple (intégré) de le faire:
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);
}
Pour Android développement, j'utilise:
int color = Color.parseColor("#123456");
Voici une version qui gère les versions RGB et RGBA:
/**
* 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;
}
Le code couleur hexadécimal est #RRGGBB
RR, GG, BB sont des valeurs hexagonales allant de 0 à 255
Appelons RR XY où X et Y sont les caractères hexadécimaux 0-9A-F, A = 10, F = 15
La valeur décimale est X * 16 + Y
Si RR = B7, le nombre décimal pour B est 11, la valeur est donc 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;
}
vous pouvez le faire simplement comme ci-dessous:
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;
}
Par exemple
getRGB("444444") = 68,68,68
getRGB("FFFFFF") = 255,255,255
Convertissez-le en entier, puis divmod-le deux fois par 16, 256, 4096 ou 65536 en fonction de la longueur de la chaîne hexagonale d'origine (3, 6, 9 ou 12 respectivement).
Pour JavaFX
import javafx.scene.Paint.Color;
.
Color whiteColor = Color.valueOf("#ffffff");
Beaucoup de ces solutions fonctionnent, mais c'est une alternative.
String 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.
Pour préciser la réponse fournie par @xhh, vous pouvez ajouter le rouge, le vert et le bleu afin de formater votre chaîne en tant que "rgb (0,0,0)" avant de la renvoyer.
/**
*
* @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();
}
Pour un code hexadécimal raccourci comme #fff ou # 000
int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
Voici une autre version plus rapide qui gère les versions de 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;
}