を受け取り、そのUIColor
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 値のそれぞれに白の値を持ちます。