Frage

Ich versuche, die RGB-Komponenten eines UIColor zu extrahieren, um die Pixel in einem CGBitmapContext Hand-zu bauen. Der folgende Beispielcode funktioniert für die meisten der UIColor Konstanten in Ordnung, aber, zum Verwechseln, nicht alle. Nämlich:

CGColorRef color = [[UIColor yellowColor] CGColor];
const float* rgba = CGColorGetComponents(color);

float r = rgba[0];
float g = rgba[1];
float b = rgba[2];
float a = rgba[3];

NSLog( @"r=%f g=%f b=%f a=%f", r, g, b, a);

Die Ergebnisse für [UIColor yellowColor] oben sind
r = 1.000000 1.000000 g = b = 0.000000 a = 1.000000, wie erwartet.

[UIColor redColor] gibt r = 1.000000 0.000000 g = b = 0.000000 a = 1.000000, wieder wie erwartet. Ähnliches gilt für blueColor und greenColor.

Jedoch , die Ergebnisse für [UIColor blackColor] und [UIColor whiteColor] scheinen völlig unregelmäßig, und ich weiß nicht, was ich falsch mache (wenn ja ich bin).

Nämlich [UIColor blackColor] gibt     r = 0.000000 1.000000 g = b = 0.000000 a = 0.000000, das ist ein tranparent grün,

und [UIColor whiteColor] gibt     r = 1.000000 1.000000 g = b = 0.000000 a = 0.000000, Das ist ein transparentes Gelb.

Ich würde es begrüßen, wenn jemand könnte entweder:

(1) erklären, was ich falsch mache
(2) meine anomalen Ergebnisse replizieren und mir sagen, dass es mich nicht, oder in (3) traf mich über den Kopf mit einem großen Hammer so hört es so sehr weh.

Howard

War es hilfreich?

Lösung

Sie sind unter der Annahme, der Farbraum ist immer RGBA, was nicht der Fall ist.

Versuchen Sie diesen Code ein:

CGColorRef color = [[UIColor blackColor] CGColor];
const CGFloat* rgba = CGColorGetComponents(color);
CGColorSpaceRef space = CGColorGetColorSpace(color);
CGColorSpaceModel model = CGColorSpaceGetModel(space);
NSLog(@"%d", model);

Und Modell wird ergeben kCGColorSpaceModelMonochrome.

Andere Tipps

Ich glaube, das, was Sie fehlt sind, ist, dass Farben in verschiedenen Farbräumen definiert werden. Sie gehen davon aus, sie sind alle RGBA

Zum Beispiel, die Dokumentation Zustand, der blackColor‚Gibt eine Farbobjekt, dessen Grauwert ist 0,0, und dessen alpha-Wert beträgt 1,0‘. Deshalb denke ich, nur zwei Komponenten gelten für schwarz, nicht vier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top