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

Était-ce utile?

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

Par exemple, l'état de documents qui blackColor « Renvoie un objet de couleur dont la valeur d'échelle de gris est 0,0 et dont la valeur alpha est de 1,0 ». Donc, je pense que deux composants sont valables pour le noir, pas quatre.

scroll top