2

を受け取り、そのUIColorRGBA 値を使用する必要がある関数があります。私がこれまでに行ったことは使用することでしたCGColorGetComponentsが、他の色空間 (たとえば[UIColor blackColor]、グレースケール) ではうまく機能しません。getRed green blue (iOS 5) の使用も機能しません[UIColor blackColor](false を返します)。

これを行う簡単な方法はありますか?

4

2 に答える 2

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;
        }
}
于 2012-12-15T09:10:40.833 に答える
0

getRed:...色が RGB 色空間にない場合は false を返します。他のほとんど唯一のオプションはグレースケールの色空間なので、試してみるgetWhite:alpha:と有効な値が返されるはずです。この色に相当する RGBA は、R、G、および B 値のそれぞれに白の値を持ちます。

于 2012-12-15T08:55:30.827 に答える