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

Xcode4 UIColor从RGB转换为HSV,将亮度设置为UIColor,xcode4,ios5,uicolor,Xcode4,Ios5,Uicolor,在我的应用程序中,我尝试用不同的颜色绘制。我有我自己的颜色选择器,但我想添加到这个选择器滑块的颜色亮度。对于替补:我选择一种在视图中某个地方显示的颜色作为背景色,并向该颜色添加滑块,该滑块将从1滑动到0,并更改颜色的亮度,并在窗口中显示颜色。因此,我想问,是否有任何可能的方式,如何转换 在我的项目中,我使用以下方法: CGContextSetRGBStrokeColor(current, R, G, B, A); 因此,每当我滑动滑块时,我都需要更改颜色的亮度,因此我需要将表示为RGB的UIC

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

在我的项目中,我使用以下方法:

CGContextSetRGBStrokeColor(current, R, G, B, A);
因此,每当我滑动滑块时,我都需要更改颜色的亮度,因此我需要将表示为RGB的
UIColor
转换为HSV,然后再转换回RGB,以便再次使用它

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

+(结构HSV_颜色)HSVfromRGB:(结构RGB_颜色)RGB
{
结构hsv_彩色hsv;
CGFloat rgb_最小值,rgb_最大值;
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_最大-rgb_最小))+120.0f;
}else if(rgb_max==rgb.b){
hsv.hue=60.0f*((rgb.r-rgb.g)/(rgb_最大值-rgb_最小值))+240.0f;
}
hsv.val=rgb_max;
如果(rgb_max==0){
hsv.sat=0;
}否则{
hsv.sat=1.0-(rgb_最小值/rgb_最大值);
}
返回hsv;
}

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

如果我正确解释了你的意图:

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

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

当然这里有一个链接:有一个小“bug”。假设您希望色调为非负色调,请更改
hsv.hue=fmodf(hsv.hue,360.0f)行到
hsv.hue=fmodf(hsv.hue+360.0f,360.0f)