2009-05-20 9 views
12

UIColorのrgbコンポーネントを抽出して、のピクセルを手作業で構築しようとしています。次のサンプルコードは、ほとんどのUIColor定数で問題なく動作しますが、すべてではありません。ウィットに:いくつかのUIColorsの色成分を取得する異常な結果

CGColorRef color = [[UIColor yellowColor] CGColor]; 
const float* rgba = CGColorGetComponents(color); 

float r = rgba[0]; 
float g = rgba[1]; 
float b = rgba[2]; 
float a = rgba[3]; 

NSLog(@"r=%f g=%f b=%f a=%f", r, g, b, a); 

上記[UIColor yellowColor]の結果は、予想通り
R = 1.000000 G = 1.000000、B = 0.000000 = 1.000000、 あります。

[UIColor redColor]は、予想通り再び r = 1.000000g = 0.000000b = 0.000000a = 1.000000, となる。 blueColorgreenColorについても同様です。 (実際に私がいる場合)

しかし[UIColor blackColor][UIColor whiteColor]の結果は完全に異常に見える、と私は私が間違ってやっているのか分かりません。ウィットに

[UIColor blackColor]を与える R = G = 0.000000 1.000000、B = 0.000000 = 0.000000、緑色tranparentにある 、

[UIColor whiteColor]が R = 1.000000 G = 1.000000、B = 0.000000 = 0.000000与えます、 は透明黄色である。

誰かのどちらかできれば、私はそれを感謝したい:

は、(1)私が間違っ
をやっているかを説明(3)(2)私の異常な結果を複製し、それは私ではない私に教えて、または
大きなハンマーで頭の中に私をぶつけたので、そんなに痛いことはありません。

ハワード

答えて

11

色空間が常にRGBAであると仮定していますが、そうではありません。

は、このコードを試してみてください。

CGColorRef color = [[UIColor blackColor] CGColor]; 
const CGFloat* rgba = CGColorGetComponents(color); 
CGColorSpaceRef space = CGColorGetColorSpace(color); 
CGColorSpaceModel model = CGColorSpaceGetModel(space); 
NSLog(@"%d", model); 

とモデルはkCGColorSpaceModelMonochromeを得られます。

+0

ブリリアント!ありがとうございました。私は以前、 'CGColorGetComponents(color)'を呼び出す前に、 'CGColorGetNumberOfComponents(color)'を頻繁に参照することで混乱しました。今私はなぜそれを見るのですか?ちなみに、上記のモデルの* name *を印刷する方法はありませんか?その値だけではありませんか? – hkatz

+0

デバッガはあなたの名前を表示します。数字のconst定義なので、私はあなたがそれを印刷できるかどうかはわかりません。 – pgb

2

私はあなたが不足しているものは色が異なる色空間で定義できることだと思う:あなたは、彼らがすべてのRGBAだと仮定しています。

たとえば、the docsは、blackColor "グレースケール値が0.0でアルファ値が1.0のカラーオブジェクトを返します。だから、私は4つではなく、2つのコンポーネントだけが黒に有効だと思う。

関連する問題