2012-12-15 222 views
2

我有一個函數,它接收UIColor並需要使用它的RGBA值。 我到目前爲止所做的只是使用CGColorGetComponents,但對於其他顏色空間(例如灰度級的[UIColor blackColor])不起作用。 使用getRed綠色藍色(在iOS 5中)也不適用於[UIColor blackColor](返回false)。iOS將顏色轉換爲RGB

任何簡單的方法呢?

回答

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; 
     } 
} 
0

getRed:...如果顏色不在RGB顏色空間中,將返回false。幾乎唯一的其他選擇是灰度色彩空間,所以如果您嘗試getWhite:alpha:,則應該返回有效值。這種顏色的RGBA等價物將具有R,G和B值中的每一個的白色值。

+0

有一個CMYK色彩空間,但據推測Yaniv知道他是否在他的應用程序中使用它。 –

+0

@robmayoff - 不僅僅是CMYK NSColor,UIColor不支持它。 – jrturton

+0

哈哈我應該更仔細的搜索。我正在查看'CGColorCreateGenericCMYK',它確實只是OS X。 –