1

FF0000 という色を持っているとしましょう。これは赤です。暗い色を見つけるのは簡単です。FF の代わりに CC と入力するだけかもしれませんが、複雑な色である AE83FC という色を持っているとしましょう。

これを行う簡単な方法は、RGB を HSB [色相、彩度、明るさ] に変換することだと考えました。

Objective-Cでそれを行うにはどうすればよいですか?

1.0、0.0、0.0 の RGB があるとします。それは赤です。

CGFloat r = 1.0;
CGFloat g = 0.0;
CGfloat b = 0.0;

それをHSBに変換してから、色を変換してRGBに戻してCGContextRGBSetFillColorを使用するにはどうすればよいですか?

HSB関数はありますか?

助けてください。:)

4

2 に答える 2

4

まず、3 つの数字は色を表すのではなく、3 つの数字と色空間を組み合わせて表すことに注意してください。RGB は色空間ではなく、いわゆるカラー モデルです。RGB モデルには多くの色空間があります。したがって、((1,0,0), sRGB) は ((1,0,0), Adob​​e RGB) とは異なる色です。一連のバイト自体が文字列ではない文字列エンコーディングがどのように機能するかを知っていますか? それはとても似ています。また、色空間の処理を台無しにする機会であるため、コンポーネントの値を見たいときはいつでもトラブルを求めているという点でも似ています。

申し訳ありませんが、自分を助けることはできません。とにかく、元の色が ((1,0,0), Generic RGB) であるかのように質問に答えます。

NSColor *color = [NSColor colorWithCalibratedRed:1 green:0 blue:0 alpha:1];
NSLog(@"hue! %g saturation! %g brightness! %g, [color hueComponent], [color saturationComponent], [color brightnessComponent]);

その一方で、

NSColor *color = [NSColor colorWithCalibratedHue:h saturation:s brightness:b alpha:1];
NSLog(@"red! %g green! %g blue! %g, [color redComponent], [color greenComponent], [color blueComponent]);

これらの fooComponent メソッドは、すべての色で機能するわけではなく、2 つの特定の色空間でのみ機能します。ドキュメントを参照してください。上記の方法で自分で色を作成した場合は、自分が優れていることを既に知っています。出自が不明な色がある場合は、-[NSColor colorUsingColorspaceName:].

于 2010-04-07T08:56:46.437 に答える
0

このために HSB まで行く必要はありません。より暗いバージョンの色を見つけたい場合は、R、G、B の各コンポーネントに 0 から 1 の間の数値を掛けるだけで、同じ色になりますが、より暗い色になります。

例: AE83FC の半分の強度:

  {0xAE, 0x83, 0xFC} * 0.5 =
  {174, 131, 252} * 0.5 =
  {87, 65, 126} =
  {0x57, 0x41, 0x7E} => 57417E

同様に、1 より大きい値を乗算することで、より明るいバージョンを取得できます。各コンポーネントの値を 255 より大きくすることはできないため、その場合は 255 に制限する必要があります。つまり、色は同じ色の正確な明るいバージョンにはなりませんが、おそらく目的には十分近いでしょう。

于 2010-04-07T09:08:40.107 に答える