首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CGColorGetComponents有什么问题吗?

CGColorGetComponents有什么问题吗?
EN

Stack Overflow用户
提问于 2012-02-11 16:04:16
回答 1查看 4.3K关注 0票数 18

当我使用从UIColor返回的CGColor调用CGColorGetComponents时,它似乎可以正常工作,但白色和黑色除外。

这是代码。

代码语言:javascript
复制
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]);

此日志

代码语言:javascript
复制
r=1.000000, g=1.000000, b=0.000000, a=0.000000

注意B和A都是0,而不是1。

如果你替换其他颜色,如redColor,blueColor等,它可以工作...RGB和A值的设置与预期一致。但再一次,黑白产生奇怪的结果。这个功能有什么问题吗?或者有没有我应该做的变通方法/任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-11 16:37:36

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

当然,你也可以使用NSLog。

代码语言:javascript
复制
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?");
}

请注意,也有不同的colorSpaces。因此,如果除了日志记录(例如,将RGBA字符串保存为json)之外还需要使用此代码,则还必须检查(可能还会转换) colorSpace。

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9238743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档