2013-02-28 7 views
11

3色の色相、彩度、明るさを得るためのいくつかの結果を示しましょう。なぜ[UIColor whiteColor]とblackColorの明るさが等しいのですか

[[UIColor redColor] getHue:&hue 
       saturation:&saturation 
       brightness:&brightness 
       alpha:&alpha]; 

hue = 1.0 saturatino = 1.0 brightness = 1.0 alpha = 0.0 

[[UIColor whiteColor] getHue:&hue 
        saturation:&saturation 
        brightness:&brightness 
         alpha:&alpha]; 

hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0 

[[UIColor blackColor] getHue:&hue 
        saturation:&saturation 
        brightness:&brightness 
         alpha:&alpha]; 

hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0 

色相、彩度、白と黒の色の明るさが同じである、なぜ?誰も説明できアルファがゼロに等しい理由私は私のプロジェクトでやりたいこと

は、明るさ変更することにより、与えられた色から「暗い」色を生成します:

明るさ=明るさ* 0.8;

どの色でも問題なく動作しますが、白色から黒色を生成します。 (私は灰色を期待していますが)。

+0

+1グレートキャッチし、これを試したことがありません。 –

+0

'saturatino'はカッテリーノを鳴らします:) –

答えて

12

理由は、+whiteColor+blackColorは両方ともHSB色空間と互換性がないグレースケール色空間で色を返すためです。したがって、-getHue:saturation:brightness:alpha:は実際にはパラメータを変更していません。そのメソッドを呼び出す前に、すべて0.0に設定されていることがわかります。 -getHue:saturation:brightness:alpha:の戻り値をチェックすると、HSBに正常に変換されたかどうかがわかります。

+0

+1素晴らしい!!!これは決して考えなかった。 –

+0

ありがとう!それで、たとえそれがグレースケールであっても、UIColorからより暗い色を生成する普遍的な方法はありますか? getHueのときに他の状況がありますか?saturation:brightness:alpha:falseを返す可能性がありますか? – msmialko

+1

@モリケンディ:他の色空間もHSBに変換できない可能性がありますが、iOSプログラミングでどのくらいの色空間を使いこなせるか分かりません。最悪の場合は、独自のデータに裏打ちされた1pxずつの1GBのCGBitmapContextを作成し、元の色で塗りつぶして、ほとんど透明な黒で塗りつぶし、コンテキストを削除して、新しい色のピクセルバッファを読み込みます。 –

0

上記のKevin Ballardは、問題の原因について正しい答えを示しました。私は、色のアルファを動的に変更したいという点を除いて、私が働いているアプリでも同様の要件があります。これを行うために、私はカテゴリ(UIColor + Modify)を1つのメソッドで作成しました(下のコードを参照)。実装では、色がRGB/HSB空間にない場合、白の色合いを探していると想定しています。明るさを「乗算」するためにこれを簡単に適応させることができます。私は別の色の明るさとアルファ変更したいとき

#import "UIColor+Modify.h" 

@implementation UIColor (Modify) 
-(UIColor*)setBrightness:(CGFloat)brightness alpha:(CGFloat)alpha { 
    CGFloat hue = 0.0F; 
    CGFloat saturation = 0.0F; 

    [self getHue:&hue saturation:&saturation brightness:nil alpha:nil]) 

    // if the above fails then hue and saturation will still be 0.0F 
    // according to Apple's documentation <1> 

    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha]; 
} 
@end 

私は、このメソッドを使用します。

#import "UIColor+Modify.h" 
... 
UIColor brightColor = [UIColor redColor]; 
UIColor lessBrightSeeThroughColor = [someColor setBrightness:0.9F alpha 0.8F]; 
.... 

< 1>UIColor documentation

関連する問題