让我向您展示一些获得三个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;
它适用于任何颜色,但它会从白色产生黑色。 (虽然我希望有一种灰色的颜色)。
答案 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