2010-11-09 12 views
63

Wie kann ich in Java Hex-Farbe in RGB-Code konvertieren? Meist in Google, Beispiele sind, wie Sie von RGB zu Hex konvertieren.Wie konvertiert man Hex mit Java in rgb?

+0

Können Sie ein Beispiel dafür angeben, was Sie konvertieren möchten und in was Sie konvertieren möchten? Es ist nicht klar, was genau Sie vorhaben. – kkress

+0

000000 wird in schwarze Farbe umgewandelt rgb – user236501

Antwort

137

Ich denke, das sollte es tun:

/** 
* 
* @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

Für diejenigen, die eine 3-Zeichen-Version wünschen, beachten Sie, dass in dem 3-Zeichen-Fall jeder Wert * 255/16 sein muss. Ich testete dies mit "000", "aaa" und "fff" und sie alle funktionieren ordnungsgemäß jetzt. – Andrew

2

Konvertieren Sie es in eine ganze Zahl und divmodieren Sie es dann zweimal mit 16, 256, 4096 oder 65536, je nach Länge der ursprünglichen Hex-Zeichenfolge (3, 6, 9 oder 12).

1

Hexadezimale Farbcodes sind bereits rgb. Das Format ist #RRGGBB

+3

Es sei denn, es ist #RGB, #RRRGGGBBB oder #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

Ein Hex-Farbcode ist #RRGGBB

RR, GG, BB sind im Bereich Hex-Werte von 0 bis 255

Nennen wir RR XY, wobei X und Y sind hex-Zeichen 0-9A-F, A = 10, F = 15

Der Dezimalwert ist X * 1 6 + Y

Wenn RR = B7, die dezimale für B 11 ist, so Wert ist 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

Eigentlich gibt es eine einfachere (eingebaut) Art und Weise, dies zu tun:

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

leider ist das AWT:/ – wuppi

+2

@wuppi Ich dachte, das war eigentlich eine gute Nachricht, wie AWT in JDK ist. Was ist daran so unglücklich? –

+0

Eclipse RCP ist SWT, mit dem ich gearbeitet habe. – wuppi

19

Für Android Entwicklung, die ich benutze:

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

Ersetzen Sie einfach die '#' durch '0x' –

1

Um auf th zu erarbeiten Die Antwort @xhh vorausgesetzt, Sie können die rote, grüne und blaue anfügen, um Ihre Zeichenfolge als "rgb (0,0,0)" zu formatieren, bevor Sie es zurückgeben.

/** 
* 
* @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

Sie können es einfach wie folgt:

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

Für Beispiel

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

Viele dieser Lösungen arbeiten, aber dies ist eine Alternative.

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

Wenn Sie nicht hinzufügen 4278190080 (# FF000000) die Farbe ein Alpha von 0 hat und zeigt nicht.

0

Neulich Ich hatte das ähnliche Problem zu lösen und fand praktisch hex Farbe String in int array [alpha, r, g, b] zu konvertieren:

/** 
* 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

Hier ist eine Version, die beide Griffe RGB- und RGBA-Versionen:

/** 
* 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

Wenn Sie nicht möchten, dass die AWT Color.decode verwenden, kopieren Sie einfach den Inhalt der Methode:

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

Ganzzahl.decode behandelt die Zeichen # oder 0x, je nachdem, wie die Zeichenfolge formatiert ist.

Verwandte Themen