我有一个接收 aUIColor
并需要使用它的 RGBA 值的函数。到目前为止我所做的是使用CGColorGetComponents
,但这不适用于其他色彩空间(例如[UIColor blackColor]
灰度)。使用 getRed green blue(在 iOS 5 中)也不起作用[UIColor blackColor]
(返回 false)。
有什么简单的方法吗?
以下方法应该适用于大多数情况(图案颜色除外)。将其作为类别添加到 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;
}
}
getRed:...
如果颜色不在 RGB 颜色空间中,将返回 false。几乎唯一的其他选择是灰度色彩空间,所以如果你尝试getWhite:alpha:
,你应该得到有效的值。这种颜色的 RGBA 等效项将具有 R、G 和 B 值中的每一个的白色值。