wake-up-neo.net

wie kann man RGB-Farbe in Java konvertieren?

Paint.setColor erwartet eine ganze Zahl. Was ich aber habe, ist ein Color Objekt. Ich sehe keine color.getIntValue() in Java? Wie mache ich das? Was ich will ist so etwas

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

Korrektur: Android.graphics.Color; Ich dachte, Android als eines der Tags wäre ausreichend. Aber anscheinend nicht.

12
Cote Mounyo

Zunächst einmal ist Android.graphics.Color eine Klasse, die nur aus statischen Methoden besteht. Wie und warum haben Sie ein neues Android.graphics.Color-Objekt erstellt? (Dies ist völlig nutzlos und das Objekt selbst speichert keine Daten.)

Aber auf jeden Fall ... Ich gehe davon aus, dass Sie ein Objekt verwenden, das tatsächlich Daten speichert ...

Eine Ganzzahl besteht aus 4 Bytes (in Java). Wenn Sie die Funktion getRGB () des Standard-Java-Color-Objekts betrachten, können Sie sehen, wie Java jeder Farbe ein Byte der Ganzzahl in der Reihenfolge ARGB (Alpha-Rot-Grün-Blau) zuordnet. Wir können dieses Verhalten mit einer benutzerdefinierten Methode wie folgt replizieren:

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

Dies setzt voraus, dass Sie die einzelnen roten, grünen und blauen Farbkomponenten irgendwie abrufen können und dass alle Werte, die Sie für die Farben übergeben haben, 0-255 betragen.

Wenn Ihre RGB-Werte in Form eines Float-Prozentsatzes zwischen 0 und 1 liegen, sollten Sie die folgende Methode in Betracht ziehen:

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

Wie andere bereits erwähnt haben, verwenden Sie einfach getRGB (), wenn Sie ein Standard-Java-Objekt verwenden.

Wenn Sie sich für die richtige Verwendung der Android-Farbklasse entscheiden, können Sie auch Folgendes tun:

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

oder

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

wie andere schon gesagt haben ... (Zweite Funktion nimmt 100% Alpha an)

Beide Methoden machen grundsätzlich dasselbe wie die erste Methode, die oben erstellt wurde.

37
initramfs

Wenn Sie für Android entwickeln, ist die Methode von Color rgb (int, int, int). 

Also würdest du sowas machen

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

Zum Abrufen der einzelnen Farbwerte können Sie die folgenden Methoden verwenden: 

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

Siehe dieses Dokument für weitere Informationen

17
superdiazepam

Color verfügt über eine getRGB () - Methode, die die Farbe als int zurückgibt.

6
chrylis

Sie möchten intvalue = Color.parseColor("#" + colorobject); verwenden

5
JoppeD

int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);

3
Amol Jindal

Sie können einen Wert in color.xml deklarieren und somit einen ganzzahligen Wert erhalten, indem Sie den folgenden Code aufrufen.

context.getColor(int resId);
1
TangQisen