调整滑块以改变UIColor的亮度

3
我已经使用圆形渐变开发了一个响应平移手势的颜色轮,并添加了一个控制颜色透明度值的滑块,以及打印出R、G和B值的文本字段。
现在我需要实现一个控制颜色亮度的滑块,但是我无法使用以下代码实现:
- (void)changeBrightness:(id)sender {
    hellSlider = (UISlider *)sender;

    float red = r;
    float green = g;
    float blue = b;
    float alp = alphaSlider.value;
    UIColor *color2 = [UIColor colorWithRed:red green:green blue:blue alpha: alp];
    colorView.backgroundColor = color2;
}

事实上,我目前还不知道如何解决这个问题。因为似乎没有可供访问的亮度属性,而我也不知道如何将颜色转换为HSV值。
非常感谢您的帮助。
3个回答

4

你应该处理HSB颜色方法:

+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha

并且,这里有一个关于颜色样式转换的链接:在iPhone上将RGB转换为HSB?


我知道HSB方法,但我不理解你链接中重新计算RGB为HSV的代码。如果你能指点我正确的方向,那就太好了!如果可以的话,我会投赞成票的。 - Exothug
这很复杂,因为它不仅仅是将数字转换为等效数字,而是一个不同的颜色空间,所以需要一些工作。你尝试过- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha方法吗? - stevo-
还没有。你能给个例子吗?离题:我现在有足够的声望了,让我投票支持你。 - Exothug

1
你需要将颜色转换为HSB颜色空间,这会给你一个“亮度”的参数。
从UIColor实例中获取这些值很简单,但涉及到通过引用传递值,这可能对新手编程者来说比较陌生。
UIColor *currentColor = colorView.backgroundColor;
CGFloat hue, saturation, brightness, alpha;

BOOL success = [currentColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];

这将值放入相应的参数中。然后您可以根据需要调整亮度组件,然后从新值重新创建一个UIColor对象。
brightness = hellSlider.value * brightness; // example transformation, assuming hellSlider's value is bounded between 0 and 1

UIColor *newColor = [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha]; 
colorView.backgroundColor = newColor;

1

好的,我按照建议使用HSB颜色方法让它正常工作了。

代码:

- (void)changeBrightness:(id)sender {
    hellSlider = (UISlider *)sender;

    UIColor *currentColor = colorView.backgroundColor;
    CGFloat hue, saturation, brightness, alpha;
    BOOL success = [currentColor getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
    brightness = hellSlider.value;
    UIColor *newColor = [UIColor colorWithHue:hue saturation:saturationSlider.value brightness:hellSlider.value alpha:alphaSlider.value];

    colorView.backgroundColor = newColor;
    alphaText.text = [NSString stringWithFormat:@"%.2f",alphaSlider.value];
    brightnessText.text = [NSString stringWithFormat:@"%.2f",hellSlider.value];
    saturationText.text = [NSString stringWithFormat:@"%.2f",saturationSlider.value];

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接