获得某些UIColors的颜色组件的异常结果

时间:2009-05-20 12:16:12

标签: iphone core-graphics uicolor cgcolor

我正在尝试提取UIColor的rgb组件,以便在CGBitmapContext中手工构建像素。以下示例代码适用于大多数UIColor常量,但令人困惑,并非全部。即:

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);

以上[UIColor yellowColor]的结果为
r = 1.000000 g = 1.000000 b = 0.000000 a = 1.000000, 如预期的那样。

[UIColor redColor]给出 r = 1.000000 g = 0.000000 b = 0.000000 a = 1.000000, 如预期的那样。同样适用于blueColorgreenColor

然而[UIColor blackColor][UIColor whiteColor]的结果似乎完全异常,我不知道我做错了什么(如果我确实是这样)。< / p>

即便如此,[UIColor blackColor]给出了     r = 0.000000 g = 1.000000 b = 0.000000 a = 0.000000, 这是一种透明的绿色,

[UIColor whiteColor]给出     r = 1.000000 g = 1.000000 b = 0.000000 a = 0.000000, 这是一种透明的黄色。

如果有人可以,我会很感激:

(1)解释我做错了什么 (2)复制我的异常结果并告诉我这不是我,或者是 (3)用一把大锤击中头部,这样就不会再受伤了。

霍华德

2 个答案:

答案 0 :(得分:10)

您假设颜色空间始终为RGBA,但实际情况并非如此。

试试这段代码:

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

模型将产生kCGColorSpaceModelMonochrome

答案 1 :(得分:2)

我认为你缺少的是颜色可以在不同的颜色空间中定义:你假设它们都是RGBA。

例如,the docs表示blackColor“返回一个颜色对象,其灰度值为0.0且其alpha值为1.0”。所以我认为只有两个组件对黑色有效,而不是四个。