【问题标题】:Is there an issue with CGColorGetComponents?CGColorGetComponents 有问题吗?
【发布时间】:2012-03-03 13:39:57
【问题描述】:

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

这是代码...

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 值按预期设置。但同样,黑白会产生奇怪的结果。这个功能有问题还是我应该做一些解决方法/任务?

【问题讨论】:

    标签: iphone objective-c ios uicolor


    【解决方案1】:

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

    当然你也可以 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。

    【讨论】:

    • 好的,那么从 UIColor 开始,如何轻松设置当前的填充和描边颜色,或者每次我们需要做的时候都必须做你刚才做的事情? (至于色彩空间,我只对设置在 0.0 和 1.0 之间并显示在屏幕上的 RGBA 值感兴趣。其他任何事情都超出了我们所做的范围。)
    • 对于 CGContextRef?只需使用CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    • 另外,您的代码中的color.CGColor 是什么?这与myColorRef 不同吗?
    • 哦,对不起。忘记将其更改为您的变量名。颜色是 UIColor。所以 color.CGColor 和你的 myColorRef 一样
    • 啊啊!我们获取组件的全部原因是调用 CGContextSetColor。不知道基本上为我们做到这一点的“WithColor”变体。我一定忽略了这一点。完美!
    猜你喜欢
    • 2018-09-14
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多