web-dev-qa-db-fra.com

Comment convertir hex en RGB avec Java?

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.

79
user236501

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 ) );
}
148
xhh

En fait, il existe un moyen plus simple (intégré) de le faire: 

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

Pour Android développement, j'utilise:

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

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;
}
5
Ian Newland

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

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
3
Naveen

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");
1
Sayka

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.

0
Rich S

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();
}
0
dragunfli

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);
0
GTID

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