2012-02-04 118 views
2

在我的應用程序中,我試圖繪製不同的顏色。我有我自己的顏色選擇器,但我想添加到這個選擇器滑塊顏色亮度。對於輕視:我選擇一種顏色作爲背景顏色顯示在視圖中,我希望添加滑塊,該滑塊將從1滑動到0,並更改顏色的亮度並在窗口中顯示顏色。所以我想問一下如果有什麼可能的辦法如何轉換。從RGB到HSV的UIColor轉換,將亮度設置爲UIColor

在我的項目

我用這個:

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

所以只要我滑動滑塊我需要改變顏色的亮度,因此我需要轉換我UIColor - 表示爲RGB到HSV比背到RGB再次使用它。

是否存在任何RGB到HSV轉換算法或在iOS 5或Xcode4中有沒有?

回答

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; 
} 
+0

這也可以在Xcode中使用? – 2012-02-05 12:52:51

+0

當然這裏是一個鏈接: http://code.google.com/p/iphone-color-picker/source/browse/trunk/Classes/UIColor-HSVAdditions.m?r=6 – realPro 2012-02-05 14:47:42

+0

嘿男人非常感謝,真的幫助我!=) – 2012-02-06 00:31:03

0

我不清楚在原來的問題中,如果你真的想要「亮度」或alpha。 RGB和HSV配色方案完全不同。

如果我理解正確的意圖:

你並不需要轉換從RGB到HSV和回RGB,如果你想要做的是控制RGB顏色的alpha通道。

實現您想要做的最簡單和最有效的方法是簡單地爲alpha添加一個滑塊並從中輸出顏色透明度。