从RGB到HSV的UIColor转换,将亮度设置为UIColor

Rad*_*far 2 uicolor xcode4 ios5

在我的应用程序中,我试图用不同的颜色绘制.我有自己的颜色选择器,但我想添加到此选择器滑块以获得颜色亮度.对于底层测试:我选择一种在视图中作为背景颜色显示的颜色,并且我希望添加滑块,它将从1滑动到0并改变颜色的亮度并在窗口中显示颜色.因此,我想询问是否有任何可能的转换方法.

在我的项目中我用这个:

CGContextSetRGBStrokeColor(current, R, G, B, A);
Run Code Online (Sandbox Code Playgroud)

所以当我滑动滑块时,我需要更改颜色的亮度,因此我需要将我的UIColor- 表示为RGB 转换为HSV而不是返回RGB再次使用它.

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

rea*_*Pro 7

+(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;
}
Run Code Online (Sandbox Code Playgroud)

  • 有一个小“错误”。假设您希望色调为非负数,请将 `hsv.hue = fmodf(hsv.hue, 360.0f);` 行更改为 `hsv.hue = fmodf(hsv.hue + 360.0f, 360.0f);`。 (2认同)