Anomale Ergebnisse zu erzielen Farbkomponenten einiger UIColors
-
23-08-2019 - |
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
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.