iOS将颜色转换为RGB

时间:2012-12-15 08:50:43

标签: ios uicolor

我有一个接收UIColor的函数,需要使用它的RGBA值。 到目前为止我所做的是使用CGColorGetComponents,但这对于其他颜色空间(例如灰度的[UIColor blackColor])效果不佳。 使用getRed绿色蓝色(在iOS 5中)也不适用于[UIColor blackColor](返回false)。

这样做的简单方法是什么?

2 个答案:

答案 0 :(得分:2)

以下方法在大多数情况下都适用(图案颜色除外)。将其作为类别添加到UIColor。

- (void)getRGBA:(CGFloat*)buffer {
        CGColorRef clr = [self CGColor];
        NSInteger n = CGColorGetNumberOfComponents(clr);
        const CGFloat *colors = CGColorGetComponents(clr);
        switch (n) {
        case 2:
            for(int i = 0; i<3; ++i){
                buffer[i] = colors[0];
            }
            buffer[3] = CGColorGetAlpha(clr);
            break;
        case 3:
            for(int i = 0; i<3; ++i){
                buffer[i] = colors[i];
            }
            buffer[3] = 1.0;
            break;
        case 4:
            for(int i = 0; i<4; ++i){
                buffer[i] = colors[i];
            }
            break;
        default:
            break;
        }
}

答案 1 :(得分:0)

如果颜色不在RGB颜色空间中,

getRed:...将返回false。几乎唯一的另一个选择是灰度色彩空间,所以如果你尝试getWhite:alpha:,你应该得到有效的值。然后,该颜色的RGBA等效物将具有R,G和B值中的每一个的白色值。