résultats aberrants obtenir des composants de couleur de certains UIColors
-
23-08-2019 - |
Question
Je suis en train d'extraire les composants rgb d'un UIColor
pour la main construire les pixels dans un CGBitmapContext
. Le code exemple suivant fonctionne très bien pour la plupart des constantes de UIColor
mais, prêter à confusion, pas tous. À savoir:
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);
Les résultats ci-dessus pour [UIColor yellowColor]
sont
r = g = 1.000000 1.000000 0.000000 b = a = 1.000000,
comme prévu.
[UIColor redColor]
donne
r = g = 1.000000 0.000000 0.000000 b = a = 1.000000,
à nouveau comme prévu. De même pour blueColor
et greenColor
.
Cependant , les résultats pour [UIColor blackColor]
et [UIColor whiteColor]
semblent tout à fait anormale, et je ne sais pas ce que je fais mal (si je suis en effet).
A savoir, [UIColor blackColor]
donne
r = g = 0.000000 1.000000 0.000000 b = a = 0.000000,
qui est un vert tranparent,
et donne [UIColor whiteColor]
r = g = 1.000000 1.000000 0.000000 b = a = 0.000000,
qui est un jaune transparent.
Je serais reconnaissant si quelqu'un pouvait soit:
(1) expliquer ce que je fais mal
(2) reproduire mes résultats anormaux et me dire que c'est pas moi, ou
(3) m'a frappé sur la tête avec un gros marteau de sorte qu'il cesse de blesser tellement.
Howard
La solution
Vous assumez l'espace de couleur est toujours RGBA, ce qui est le cas.
Essayez ce code:
CGColorRef color = [[UIColor blackColor] CGColor];
const CGFloat* rgba = CGColorGetComponents(color);
CGColorSpaceRef space = CGColorGetColorSpace(color);
CGColorSpaceModel model = CGColorSpaceGetModel(space);
NSLog(@"%d", model);
Et le modèle donnera kCGColorSpaceModelMonochrome
.
Autres conseils
Je pense que la chose vous manque est que les couleurs peuvent être définies dans différents espaces de couleurs. Vous en supposant qu'ils sont tous RGBA