为什么[UIColor白色]和黑色的亮度相等

时间:2013-02-28 08:37:34

标签: iphone cocoa-touch cocoa ios5 uikit

让我向您展示一些获得三个UIColors的色调,饱和度和亮度的结果。

[[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

有谁可以解释为什么白色和黑色的色调,饱和度,亮度相等?为什么alpha等于零?

我想在项目中做的是通过改变亮度从给定颜色生成“深色”颜色:

  

亮度=亮度* 0.8;

它适用于任何颜色,但它会从白色产生黑色。 (虽然我希望有一种灰色的颜色)。

2 个答案:

答案 0 :(得分:12)

原因是因为+whiteColor+blackColor都返回灰度颜色空间中的颜色,这与HSB颜色空间不兼容。因此,-getHue:saturation:brightness:alpha:实际上并未修改参数。我想你会在调用该方法之前将它们全部设置为0.0。如果您检查-getHue:saturation:brightness:alpha:的返回值,它将告诉您它是否成功转换为HSB。

答案 1 :(得分:0)

凯文巴拉德上面给出了关于问题原因的正确答案。我在我正在处理的应用程序中有类似的要求,除了我还想动态修改颜色的alpha。为了做到这一点,我创建了一个类别(UIColor + Modify),其中包含一个方法(参见下面的代码)。实现假设如果颜色不在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

当我想要改变另一种颜色的亮度和alpha时,我会使用这种方法:

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

&LT 1为卤素; UIColor documentation