3

我使用响应平移手势识别器的圆形渐变开发了一个色轮,并添加了一个控制颜色的 alpha 值的滑块,以及打印出 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 值。

任何帮助表示赞赏

4

3 回答 3

4

您应该处理 HSB 颜色方法:

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

并在此处查看颜色样式之间的转换:Change from RGB to HSB on iPhone?

于 2013-07-10T07:32:07.480 回答
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];

}
于 2013-07-12T07:22:32.903 回答
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;
于 2013-07-10T08:04:43.560 回答