CGColGetComponents有问题吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (12)

当我调用CGColorGetComponentsCGColor从返回的UIColor,它似乎正常工作,除了白色和黑色。

这是代码...

CGColorRef myColorRef = [[UIColor whiteColor] CGColor];

const CGFloat * colorComponents = CGColorGetComponents(myColorRef);

NSLog(@"r=%f, g=%f, b=%f, a=%f",
    colorComponents[0],
    colorComponents[1],
    colorComponents[2],
    colorComponents[3]);

这个日志

r=1.000000, g=1.000000, b=0.000000, a=0.000000

注意B和A都是零,而不是一个。

如果你替换其他颜色,如redColor,blueColor等,它可以工作...... RGB和A值按照预期设置。但是,黑色和白色再次产生奇怪的结果。这个功能是否有问题,或者是否有一些我应该做的解决方法/任务?

提问于
用户回答回答于

[UIColor whiteColor][UIColor blackColor]用于[UIColor colorWithWhite:alpha:]创建UIColor。这意味着这个CGColorRef只有2个颜色分量,而不是4个像使用其创建的颜色[UIColor colorWithRed:green:blue:alpha:]

当然你也可以NSLog那些。

if (CGColorGetNumberOfComponents(myColorRef) == 2) {
    const CGFloat *colorComponents = CGColorGetComponents(myColorRef);
    NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[0], colorComponents[0], colorComponents[1]);
}
else if (CGColorGetNumberOfComponents(myColorRef) == 4) {
    const CGFloat * colorComponents = CGColorGetComponents(myColorRef);
    NSLog(@"r=%f, g=%f, b=%f, a=%f", colorComponents[0], colorComponents[1], colorComponents[2], colorComponents[3]);
}
else {
    NSLog(@"What is this?");
}

请注意,也有不同的颜色空间。因此,如果你不仅需要此代码(例如,将RGBA字符串保存为json),还必须检查(并可能转换)colorSpace。

扫码关注云+社区