【问题标题】:UIColor conversion from RGB to HSV , set brightness to UIColorUIColor 从 RGB 转换为 HSV ,将亮度设置为 UIColor
【发布时间】:2012-02-26 21:13:06
【问题描述】:

在我的应用程序中,我尝试使用不同的颜色进行绘制。我有自己的颜色选择器,但我想将颜色亮度添加到此选择器滑块中。对于研究:我选择一种在视图中某处显示的颜色作为背景颜色,我想为这种颜色添加滑块,该滑块将从 1 滑动到 0 并更改颜色的亮度并在窗口中显示颜色。因此,我想问是否有任何可能的方式来转换。

在我的项目中我使用这个:

CGContextSetRGBStrokeColor(current, R, G, B, A);

所以每当我滑动滑块时,我都需要更改颜色的亮度,因此我需要将我的UIColor - 表示为 RGB 转换为 HSV,然后再转换回 RGB 以便再次使用它。

是否存在任何 RGB 到 HSV 的转换算法,或者在 iOS 5 或 Xcode4 中是否存在?

【问题讨论】:

    标签: xcode4 ios5 uicolor


    【解决方案1】:
    +(struct hsv_color)HSVfromRGB:(struct rgb_color)rgb
    {
        struct hsv_color hsv;
    
        CGFloat rgb_min, rgb_max;
        rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
        rgb_max = MAX3(rgb.r, rgb.g, rgb.b);
    
        if (rgb_max == rgb_min) {
            hsv.hue = 0;
        } else if (rgb_max == rgb.r) {
            hsv.hue = 60.0f * ((rgb.g - rgb.b) / (rgb_max - rgb_min));
            hsv.hue = fmodf(hsv.hue, 360.0f);
        } else if (rgb_max == rgb.g) {
            hsv.hue = 60.0f * ((rgb.b - rgb.r) / (rgb_max - rgb_min)) + 120.0f;
        } else if (rgb_max == rgb.b) {
            hsv.hue = 60.0f * ((rgb.r - rgb.g) / (rgb_max - rgb_min)) + 240.0f;
        }
        hsv.val = rgb_max;
        if (rgb_max == 0) {
            hsv.sat = 0;
        } else {
            hsv.sat = 1.0 - (rgb_min / rgb_max);
        }
    
        return hsv;
    }
    

    【讨论】:

    【解决方案2】:

    我不清楚在您最初的问题中您是否真的想要“亮度”或 alpha。 RGB 和 HSV 配色方案完全不同。

    如果我正确理解您的意图:

    如果您只想控制 RGB 颜色的 Alpha 通道,则无需将 RGB 转换为 HSV 再转换回 RGB。

    实现您想要做的最简单和最有效的方法是简单地为 alpha 添加一个滑块并从中获取输出以更改颜色透明度。

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多