我有一個函數,它接收UIColor
並需要使用它的RGBA值。 我到目前爲止所做的只是使用CGColorGetComponents
,但對於其他顏色空間(例如灰度級的[UIColor blackColor]
)不起作用。 使用getRed綠色藍色(在iOS 5中)也不適用於[UIColor blackColor]
(返回false)。iOS將顏色轉換爲RGB
任何簡單的方法呢?
我有一個函數,它接收UIColor
並需要使用它的RGBA值。 我到目前爲止所做的只是使用CGColorGetComponents
,但對於其他顏色空間(例如灰度級的[UIColor blackColor]
)不起作用。 使用getRed綠色藍色(在iOS 5中)也不適用於[UIColor blackColor]
(返回false)。iOS將顏色轉換爲RGB
任何簡單的方法呢?
以下方法在大多數情況下都可以使用(圖案顏色除外)。將它作爲一個類別添加到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值中的每一個的白色值。
有一個CMYK色彩空間,但據推測Yaniv知道他是否在他的應用程序中使用它。 –
@robmayoff - 不僅僅是CMYK NSColor,UIColor不支持它。 – jrturton
哈哈我應該更仔細的搜索。我正在查看'CGColorCreateGenericCMYK',它確實只是OS X。 –