2013-08-02 8 views
12

Paint.setColor si aspetta un numero intero. Ma quello che ho è un oggetto Color. Non vedo uno color.getIntValue() in Java? Quindi come faccio? Quello che voglio è qualcosa di similecome convertire il colore rgb in int in java

public Something myMethod(Color rgb){ 
    myPaint.setColor(rgb.getIntValue()); 
    ... 
} 

Correzione: android.graphics.Color; Ho pensato avendo android come uno dei tag sarebbe sufficiente. Ma apparentemente no.

+0

Questo appare come lo stesso problema: http://stackoverflow.com/questions/6926644/android-color-to-int-conversion – TravJenkins

+0

Da dove viene l'oggetto di colore provengono da ? Sono confuso perché stai passando un oggetto Color al posto dell'int che rappresenta il colore in primo luogo. La classe Color in Android definisce i metodi statici per la creazione e la conversione di colori. Dalla mia comprensione non dovrebbe essere inizializzato –

risposta

5

Color ha un metodo getRGB() che restituisce il colore come int.

+0

I edit per mostrare la correzione che sto usando 'android.graphics.Color;' –

-1

Provate questo:

Color color = new Color (10,10,10) 


myPaint.setColor(color.getRGB()); 
+0

Sto usando android.graphics.Color; –

16

Se si sta sviluppando per Android, il metodo di colore per questo è RGB (int, int, int)

Così si farebbe qualcosa di simile

myPaint.setColor(Color.rgb(int, int, int)); 

Per recuperare i valori dei singoli colori è possibile utilizzare i metodi per farlo:

Color.red(int color) 
Color.blue(int color) 
Color.green(int color) 

Fare riferimento alla this document per ulteriori informazioni

31

Prima di tutto, è un android.graphics.Color i thats classe composta da soli metodi statici. Come e perché hai creato un nuovo oggetto android.graphics.Color? (Questo è completamente inutile e l'oggetto stesso memorizza alcun dato)

Ma comunque ... ho intenzione di assumere la vostra utilizzando un oggetto che in realtà memorizza i dati ...

Un intero è composto da 4 byte (in Java). Guardando la funzione getRGB() dall'oggetto java Color standard possiamo vedere le mappe java ogni colore a un byte del numero intero nell'ordine ARGB (Alpha-Red-Green-Blue). Siamo in grado di replicare questo comportamento con un metodo personalizzato come segue:

public int getIntFromColor(int Red, int Green, int Blue){ 
    Red = (Red << 16) & 0x00FF0000; //Shift red 16-bits and mask out other stuff 
    Green = (Green << 8) & 0x0000FF00; //Shift Green 8-bits and mask out other stuff 
    Blue = Blue & 0x000000FF; //Mask out anything not blue. 

    return 0xFF000000 | Red | Green | Blue; //0xFF000000 for 100% Alpha. Bitwise OR everything together. 
} 

Questo presuppone che si può in qualche modo recuperare il rosso individuo, componenti di colore verde e blu e che tutti i valori passato per i colori sono 0-255.

Se i valori RGB sono in forma di una percentuale float compreso tra 0 e 1 considerare il seguente metodo:

public int getIntFromColor(float Red, float Green, float Blue){ 
    int R = Math.round(255 * Red); 
    int G = Math.round(255 * Green); 
    int B = Math.round(255 * Blue); 

    R = (R << 16) & 0x00FF0000; 
    G = (G << 8) & 0x0000FF00; 
    B = B & 0x000000FF; 

    return 0xFF000000 | R | G | B; 
} 

Come altri hanno detto, se si sta utilizzando un oggetto Java Standard, basta usare getRGB ();

Se si decide di utilizzare la classe di colore Android correttamente si può anche fare:

int RGB = android.graphics.Color.argb(255, Red, Green, Blue); //Where Red, Green, Blue are the RGB components. The number 255 is for 100% Alpha 

o

int RGB = android.graphics.Color.rgb(Red, Green, Blue); //Where Red, Green, Blue are the RGB components. 

come altri hanno detto ... (seconda funzione assume 100% alfa)

Entrambi i metodi fondamentalmente fanno la stessa cosa del primo metodo creato sopra.

+0

Perché queste variabili sono in maiuscolo? –

1

È possibile dichiarare un valore a colori.xml, e quindi puoi ottenere il valore intero chiamando il codice qui sotto.

context.getColor(int resId); 
-1

Uso getRGB(), aiuta (senza programmi complicati)

restituisce una matrice di pixel interi nel modello predefinito colore RGB (TYPE_INT_ARGB) e predefinito spazio colore sRGB, da una porzione del dati di immagine.

+0

questa non è una risposta completa. per favore, elabora. –

4

si desidera utilizzare intvalue = Color.parseColor("#" + colorobject);