Estoy tratando de extraer los componentes rgb de un UIColor
para construir manualmente los píxeles en un CGBitmapContext
. El siguiente código de ejemplo funciona bien para la mayoría de las constantes UIColor
pero, confusamente, no todas. A saber:Resultados anómalos obteniendo componentes de color de algunos UIColors
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);
Los resultados para [UIColor yellowColor]
anteriormente son
r = 1,000000 g = 1,000000 b = 0,000000 a = 1,000000, como se esperaba.
[UIColor redColor]
da r = 1,000000 g = 0,000000 b = 0,000000 a = 1,000000, de nuevo como se esperaba. Del mismo modo para blueColor
y greenColor
.
Sin embargo, los resultados para [UIColor blackColor]
y [UIColor whiteColor]
parecen completamente anómala, y no sé lo que estoy haciendo mal (si es que soy).
A saber, [UIColor blackColor]
da r = 0,000000 g = 1,000000 b = 0,000000 a = 0,000000, que es un tranparent verde,
y [UIColor whiteColor]
da r = 1,000000 g = 1,000000 b = 0,000000 a = 0,000000 , que es un amarillo transparente.
lo agradecería si alguien podría o:
(1) explicar lo que estoy haciendo mal
(2) replicar mis resultados anómalos y dime que no soy yo, o
(3) golpéame en la cabeza con un gran martillo para que deje de doler tanto.
Howard
Brilliant! Gracias. He estado confundido antes por la referencia frecuente a 'CGColorGetNumberOfComponents (color)' antes de llamar 'CGColorGetComponents (color)'. Ahora veo por qué. Por cierto, ¿no hay una forma de imprimir el * nombre * del modelo anterior, y no solo su valor? – hkatz
El depurador le mostrará el nombre, no estoy seguro de que pueda imprimirlo, ya que es una definición constante de un número. – pgb