我有一个接收UIColor
的函数,需要使用它的RGBA值。
到目前为止我所做的是使用CGColorGetComponents
,但这对于其他颜色空间(例如灰度的[UIColor blackColor]
)效果不佳。
使用getRed绿色蓝色(在iOS 5中)也不适用于[UIColor blackColor]
(返回false)。
这样做的简单方法是什么?
答案 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)
getRed:...
将返回false。几乎唯一的另一个选择是灰度色彩空间,所以如果你尝试getWhite:alpha:
,你应该得到有效的值。然后,该颜色的RGBA等效物将具有R,G和B值中的每一个的白色值。