在我的应用程序中,我试图用不同的颜色绘制。我有自己的颜色选择器,但我想添加到此选择器滑块以获得颜色亮度。对于底层测试:我选择一种在视图中作为背景颜色显示的颜色,并且我希望添加滑块,它将从1滑动到0并改变颜色的亮度并在窗口中显示颜色。因此,我想询问是否有任何可能的转换方法。
在我的项目中我使用它:
CGContextSetRGBStrokeColor(current, R, G, B, A);
所以当我滑动滑块时,我需要更改颜色的亮度,因此我需要将我的UIColor
- 表示为RGB转换为HSV,然后转换回RGB以再次使用它。
是否存在任何RGB到HSV转换算法,或者在iOS 5或Xcode4中是否存在?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我不清楚你在原始问题中是否真的想要“亮度”或阿尔法。 RGB和HSV配色方案完全不同。
如果我正确理解你的意图:
如果您只想控制RGB颜色的Alpha通道,则无需从RGB转换为HSV并返回RGB。
实现您想要做的最简单,最有效的方法是简单地为alpha添加一个滑块并从中获取输出以更改颜色透明度。