RGB Werte zu CGColor konvertieren |
|
|
|
Geschrieben von: Philipp
|
TUESDAY, 11 MARCH 2008 02:00 |
Ich persönlich arbeite gerne bei der Angabe von Farben mit allgemien üblichen RGB -Werten, wobei jeweils Werte von 0 bis 255 angegeben werden.
Auf dem iPhone jedoch , wird meist mit dem struct CGColor gearbeitet. CGColor erwartet zwar auch Angaben zu rot, grün und blau, aber mit einem Wertebereich von 0 bis 1 als float . Zusätzlich wird dann noch ein Alpha-Wert ebenfalls von 0 bis 1 als float angegeben.
Das Erstellen scheint mir etwas umständlich, wie folgend gezeigt:
float r = 1.0f; // red
float g = 1.0f; // green
float b = 1.0f; // blue
float a = 1.0f; // alpha
float arrColor[4] = {r,g,b,a}; // result is white
struct CGColor* color = CGColorCreate(CGColorSpaceCreateDeviceRGB(), arrColor);
Ich habe daher eine einfache kurze Funktion geschrieben, welche mir "normale" RGB-Werte in CGColor-Werte umrechnet und diese dann als CGColor struct zurück gibt.
/**
* Convert RGB color to CGColor.
*
* @param r A red value from 0 to 255
* @param g A green value from 0 to 255
* @param b A blue value from 0 to 255
*
* @ return CGColor pointer
**/
struct CGColor* RGBToCGColor(int r, int g, int b)
{
float factor = 0.003921;
float a = 1.0f; // alpha
float arrColor[4] = {factor*r,factor*g,factor*b,a};
return CGColorCreate(CGColorSpaceCreateDeviceRGB(), arrColor);
}
float factor errechnet sich ganz einfach dadurch, wie oft die 255 in die 1 passt. Den Alpha-Wert habe ich einfach immer auf 1 gesetzt.
Und angewand sieht das Ganze dann so aus:
struct CGColor* color = RGBToCGColor(255,255,255); // result is white
Ist doch bei häufiger Anwendung wesentlich einfacher oder :-)
|
LAST_UPDATED2 |