2

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

有什么简单的方法吗?

4

2 回答 2

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;
        }
}
于 2012-12-15T09:10:40.833 回答
0

getRed:...如果颜色不在 RGB 颜色空间中,将返回 false。几乎唯一的其他选择是灰度色彩空间,所以如果你尝试getWhite:alpha:,你应该得到有效的值。这种颜色的 RGBA 等效项将具有 R、G 和 B 值中的每一个的白色值。

于 2012-12-15T08:55:30.827 回答