我正在尝试提取rgb分的一个 UIColor 为了手建立素中的一个 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.000000g=1.000000b=0.000000a=1.000000, 如预期的那样。

[UIColor redColor] 让 r=1.000000g=0.000000b=0.000000a=1.000000, 再次,如预期的那样。同样用于 blueColorgreenColor.

然而, 结果为 [UIColor blackColor][UIColor whiteColor] 似乎完全不正常的,而我不知道我在做什么错误(如果事实上我).

机智, [UIColor blackColor] 让 r=0.000000g=1.000000b=0.000000a=0.000000, 这是一个透明粘稠绿色,

[UIColor whiteColor] 让 r=1.000000g=1.000000b=0.000000a=0.000000, 这是一个透明黄色。

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

(1)解释什么是我做错了
(2)复制我的异常结果,并告诉我这不是我的,或者
(3)打我的头用一个大锤使它停止伤害这么多。

霍华德

有帮助吗?

解决方案

您正在承担的颜色空间为总是RGBA,它不是这种情况。

试试这个代码:

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

和模型将产生kCGColorSpaceModelMonochrome

其他提示

我觉得事情你错是的颜色可以被定义中不同颜色的空间:你是在假设他们都RGBA。

例如, 文档 状态 blackColor "返回一种颜色对象的灰度值为0.0和其alpha值1.0".因此,我认为只有两个组件的有效期为黑人,不是四个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top