我想從UIColor中獲取單個值。不確定如何做到這一點?如何從UIColor中獲得色調,飽和度和亮度?
回答
static void RGBtoHSV(float r, float g, float b, float *h, float *s, float *v)
{
float min, max, delta;
min = MIN(r, MIN(g, b));
max = MAX(r, MAX(g, b));
*v = max; // v
delta = max - min;
if(max != 0)
*s = delta/max; // s
else {
// r = g = b = 0 // s = 0, v is undefined
*s = 0;
*h = -1;
return;
}
if(r == max)
*h = (g - b)/delta; // between yellow & magenta
else if(g == max)
*h = 2 + (b - r)/delta; // between cyan & yellow
else
*h = 4 + (r - g)/delta; // between magenta & cyan
*h *= 60; // degrees
if(*h < 0)
*h += 360;
}
static void HSVtoRGB(float *r, float *g, float *b, float h, float s, float v)
{
int i;
float f, p, q, t;
if(s == 0) {
// achromatic (grey)
*r = *g = *b = v;
return;
}
h /= 60; // sector 0 to 5
i = floor(h);
f = h - i; // factorial part of h
p = v * (1 - s);
q = v * (1 - s * f);
t = v * (1 - s * (1 - f));
switch(i) {
case 0:
*r = v;
*g = t;
*b = p;
break;
case 1:
*r = q;
*g = v;
*b = p;
break;
case 2:
*r = p;
*g = v;
*b = t;
break;
case 3:
*r = p;
*g = q;
*b = v;
break;
case 4:
*r = t;
*g = p;
*b = v;
break;
default: // case 5:
*r = v;
*g = p;
*b = q;
break;
}
}
...
CGFloat r, g, b, a, h, s, v;
const CGFloat *comp = CGColorGetComponents([myUIColor CGColor]);
r = comp[0];
g = comp[1];
b = comp[2];
a = comp[3];
RGBtoHSV(r, g, b, &h, &s, &v);
上面的代碼假定UIColor設置在RGB空間(這是典型的)。如果顏色處於另一個顏色空間,它將會崩潰和/或具有未定義的行爲。
iOS 5.0有- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
它可以爲您完成所有這些工作。但目前尚未提供。
在達斯汀的算法的底部,他提到所有的UIColor對象的iOS 5及更高版本現在有
getHue:saturation:brightness:alpha:
這使得它很容易從一種顏色得到的值。這絕對是現在最簡單的解決方案,並且大多數人都在iOS 5上。
但對於那些不在iOS 5中的人(是的,他們仍然存在),使用這種方法會導致非常及時的崩潰。 – 2013-02-18 23:50:58
絕對 - 我的意思是對那些以現代iOS構建爲目標的人的評論。如果你可以放過iOS 4用戶,因爲在iOS 5中有很多事情發生了變化(更好),所以它絕對值得維護。 – 2013-02-19 03:38:56
- 1. 如何修改UIColor的色調,亮度和飽和度?
- 2. UIColor飽和度亮度值與顏色的常規飽和度亮度值不同
- 3. LESS:色調,飽和度和亮度 - 如何使用?
- 4. html5 - 如何做亮度,對比度,飽和度,色調上下?
- 5. Android:使用色調,飽和度和亮度定義顏色
- 6. Android圖像銳化,飽和度,色調,亮度和對比度
- 7. 如何在libgdx中指定色調,飽和度和亮度的顏色
- 8. 的UIColor getHue:飽和度:亮度:阿爾法:返回NO
- 9. 如何在.NET中使用ColorMatrix來更改亮度,顏色,飽和度,色調
- 10. 是否有將UIColor轉換爲色相飽和度亮度的功能?
- 11. 如何獲得位圖的平均色調/飽和度?
- 12. 如何去色飽和度?
- 13. 愛立信是否支持色彩調製(色調,飽和度,亮度)?
- 14. 如何在ImageMagick中更改亮度色調和部分去飽和圖像?
- 15. 橙色的色調/飽和度值
- 16. 使用FLEX設置亮度對比度色調飽和度特定元素
- 17. 亮度和色度
- 18. getHue:飽和度:亮度:alpha:用灰色返回false?
- 19. Bootstrap Alerts顏色飽和度
- 20. gnuplot pdfcairo色彩飽和度
- 21. 圖像顏色飽和度
- 22. 如何使用UISlider快速調整亮度對比度飽和度
- 23. 如何正確獲取UIColor的亮度?
- 24. 獲得新的不飽和度核
- 25. 如何調整位圖的色調/飽和度?
- 26. 如何在cocos2d中創建色調(飽和度)選取器
- 27. 如何調整YUV色彩空間中的圖像飽和度
- 28. 正常化圖像亮度和飽和度
- 29. 飽和度和亮度有什麼區別?
- 30. 色彩飽和度/ DESAT jQuery中
可能的[UIColor comparison]重複(http://stackoverflow.com/questions/3622217/uicolor-comparison) – 2011-03-12 18:17:58
不確定問題是重複,但@Matt球是正確的 - 另一個Q有你的答案。你想要的代碼是http://bravobug.com/news/?p=448 – skue 2011-03-12 18:28:49
上述文件不再可用:( – Santthosh 2011-06-18 06:12:03