Wenn Sie auch eine 3-Zeichen-Version wünschen, beachten Sie, dass im 3-Zeichen-Fall jeder Wert * 255/16 sein muss. Ich habe dies mit "000", "aaa" und "fff" getestet und alle funktionieren jetzt ordnungsgemäß .
Andrew
278
Tatsächlich gibt es eine einfachere (eingebaute) Möglichkeit, dies zu tun:
Color.parseColor unterstützt keine Farben mit drei Ziffern wie dieser: #fff
neoexpert
Sie können unten versuchen, #fff 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 (rot, grün, blau);
GTID
9
Hier ist eine Version, die sowohl RGB- als auch RGBA-Versionen verarbeitet:
/**
* 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
*/publicstaticColorHexToColor(String hex){
hex = hex.replace("#","");switch(hex.length()){case6:returnnewColor(Integer.valueOf(hex.substring(0,2),16),Integer.valueOf(hex.substring(2,4),16),Integer.valueOf(hex.substring(4,6),16));case8:returnnewColor(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));}returnnull;}
Dies war für mich nützlich, da Integer.toHexString den Alpha-Kanal unterstützt, aber Integer.decode oder Color.decode nicht damit zu funktionieren scheinen.
Ted
4
Ein hexadezimaler Farbcode ist #RRGGBB
RR, GG, BB sind Hex-Werte im Bereich von 0 bis 255
Nennen wir RR XY, wobei X und Y Hexadezimalzeichen 0-9A-F, A = 10, F = 15 sind
Der Dezimalwert ist X * 16 + Y.
Wenn RR = B7, ist die Dezimalstelle für B 11, der Wert ist also 11 * 16 + 7 = 183
publicint[] getRGB(String rgb){int[] ret =newint[3];for(int i=0; i<3; i++){
ret[i]= hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1));}return ret;}publicint 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;}
publicstaticint[] getRGB(finalString rgb){finalint[] ret =newint[3];for(int i =0; i <3; i++){
ret[i]=Integer.parseInt(rgb.substring(i *2, i *2+2),16);}return ret;}
Konvertieren Sie es in eine Ganzzahl und teilen Sie es dann zweimal durch 16, 256, 4096 oder 65536, abhängig von der Länge der ursprünglichen Hex-Zeichenfolge (3, 6, 9 bzw. 12).
Um die Antwort @xhh näher zu erläutern, können Sie Rot, Grün und Blau anhängen, um Ihre Zeichenfolge als "rgb (0,0,0)" zu formatieren, bevor Sie sie zurückgeben.
For shortened hex code like #fff or #000int red ="colorString".charAt(1)=='0'?0:"colorString".charAt(1)=='f'?255:228;int green ="colorString".charAt(2)=='0'?0:"colorString".charAt(2)=='f'?255:228;int blue ="colorString".charAt(3)=='0'?0:"colorString".charAt(3)=='f'?255:228;Color.rgb(red, green,blue);
Antworten:
Ich denke, das sollte es tun:
quelle
Tatsächlich gibt es eine einfachere (eingebaute) Möglichkeit, dies zu tun:
quelle
quelle
Für die Android- Entwicklung verwende ich:
quelle
Hier ist eine Version, die sowohl RGB- als auch RGBA-Versionen verarbeitet:
quelle
Ein hexadezimaler Farbcode ist #RRGGBB
RR, GG, BB sind Hex-Werte im Bereich von 0 bis 255
Nennen wir RR XY, wobei X und Y Hexadezimalzeichen 0-9A-F, A = 10, F = 15 sind
Der Dezimalwert ist X * 16 + Y.
Wenn RR = B7, ist die Dezimalstelle für B 11, der Wert ist also 11 * 16 + 7 = 183
quelle
Sie können es einfach wie folgt tun:
Beispielsweise
quelle
Für JavaFX
.
quelle
Konvertieren Sie es in eine Ganzzahl und teilen Sie es dann zweimal durch 16, 256, 4096 oder 65536, abhängig von der Länge der ursprünglichen Hex-Zeichenfolge (3, 6, 9 bzw. 12).
quelle
Viele dieser Lösungen funktionieren, aber dies ist eine Alternative.
Wenn Sie 4278190080 (# FF000000) nicht hinzufügen, hat die Farbe ein Alpha von 0 und wird nicht angezeigt.
quelle
Um die Antwort @xhh näher zu erläutern, können Sie Rot, Grün und Blau anhängen, um Ihre Zeichenfolge als "rgb (0,0,0)" zu formatieren, bevor Sie sie zurückgeben.
quelle
Wenn Sie den AWT Color.decode nicht verwenden möchten, kopieren Sie einfach den Inhalt der Methode:
Integer.decode behandelt das # oder 0x, je nachdem, wie Ihre Zeichenfolge formatiert ist
quelle
Hier ist eine weitere schnellere Version, die RGBA-Versionen verarbeitet:
quelle
Der einfachste Weg:
quelle
Hexidezimale Farbcodes sind bereits rgb. Das Format ist #RRGGBB
quelle
Neulich hatte ich das ähnliche Problem gelöst und fand es praktisch, Hex-Farbzeichenfolgen in int-Arrays [alpha, r, g, b] umzuwandeln:
quelle
quelle