2011-09-15 81 views
13

Ho un codice colore decimale (ad esempio: 4898901). Lo sto convertendo in un equivalente esadecimale come 4ac055. Come ottenere il valore del componente rosso, verde e blu dal codice colore esadecimale?Come ottenere il valore RGB dal codice colore esadecimale in java

+0

è necessario ottenere 3 int da una stringa? O 3 corde da una stringa? –

+0

Voglio 3 valori interi di rosso, verde e blu dal mio codice colore decimale esadecimale. – androidGuy

risposta

63

Supponendo Questa è una stringa:

// edited to support big numbers bigger than 0x80000000 
int color = (int)Long.parseLong(myColorString, 16); 
int r = (color >> 16) & 0xFF; 
int g = (color >> 8) & 0xFF; 
int b = (color >> 0) & 0xFF; 
+0

Ho usato questo codice nella mia app e quando lo eseguo su Android 2.3 ottengo excaption per myColorString: "impossibile analizzare" 4282291905 "come intero". Potresti dire perché? – NrNazifi

+0

@ProSoft: il codice sopra non è adatto a te, poiché il numero 4282291905 supera i limiti interi. È possibile utilizzare Long invece (correggerò la risposta) – MByD

+0

@ProSoft - nessun problema, spero che funzionasse – MByD

1

Quando si ha la hex-code : 4ac055. Le prime due lettere sono di colore rosso. I prossimi due sono verdi e le ultime due lettere sono per il colore blu. Quindi quando hai il codice esadecimale del colore rosso devi convertirlo in dez indietro. In questo esempio dove red 4a = 74. Green c0 = 192 e blue = 85 ..

provare a fare una funzione che dividere la hexcode e poi restituire il codice di rgb

7

Prova questa,

colorStr e.g. "#FFFFFF" 

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

Per utilizzare classe Color è necessario utilizzare java-rt-jar-stubs-1.5.0.jar come colori classe è da java.awt.Color

5

Se si dispone di una stringa in questo modo è molto più gradevole:

Color color = Color.decode("0xFF0000"); 
int red = color.getRed(); 
int blue = color.getBlue(); 
int green = color.getGreen(); 

Se si dispone di un numero, fare in questo modo:

Color color = new Color(0xFF0000); 

Poi, naturalmente, per ottenere i colori che basta fare:

float red = color.getRed(); 
float green = color.getGreen(); 
float blue = color.getBlue(); 
+1

Non riesco a trovare questa classe in 'Android' -' android.graphics.Color' non contiene tali metodi. – PPartisan

+0

È passato un po 'di tempo da quando ho giocato con questo codice. Credo che questo stia usando la classe standard di Java Color. http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html – Zammbi

0
String hex1 = "#FF00FF00"; //BLUE with Alpha value = #AARRGGBB 

int a = Integer.valueOf(hex1.substring(1, 3), 16); 
int r = Integer.valueOf(hex1.substring(3, 5), 16); 
int g = Integer.valueOf(hex1.substring(5, 7), 16); 
int b = Integer.parseInt(hex1.substring(7, 9), 16); 

Toast.makeText(getApplicationContext(), "ARGB: " + a + " , " + r + " , "+ g + " , "+ b , Toast.LENGTH_SHORT).show(); 

String hex1 = "#FF0000"; //RED with NO Alpha = #RRGGBB 

int r = Integer.valueOf(hex1.substring(1, 3), 16); 
int g = Integer.valueOf(hex1.substring(3, 5), 16); 
int b = Integer.parseInt(hex1.substring(5, 7), 16); 

Toast.makeText(getApplicationContext(), "RGB: " + r + " , "+ g + " , "+ b , Toast.LENGTH_SHORT).show(); 
Problemi correlati