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

hka*_*atz 11 iphone core-graphics cgcolor uicolor

我正在尝试提取a的rgb组件,UIColor以便手工构建a 中的像素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);
Run Code Online (Sandbox Code Playgroud)

[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]看起来完全异常,我不知道我做错了什么(如果我确实是这样).

即,[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)用大锤击中我的头部,这样它就不会伤到这么多.

霍华德

pgb*_*pgb 10

您假设颜色空间始终是RGBA,但事实并非如此.

试试这段代码:

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

而模型将产生kCGColorSpaceModelMonochrome.