反常的结果得到颜色组成部分的一些UIColors
-
23-08-2019 - |
题
我正在尝试提取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,
再次,如预期的那样。同样用于 blueColor
和 greenColor
.
然而, 结果为 [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".因此,我认为只有两个组件的有效期为黑人,不是四个。