我想从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. Android:使用色调,饱和度和亮度定义颜色
- 4. 的UIColor getHue:饱和度:亮度:阿尔法:返回NO
- 5. 如何在.NET中使用ColorMatrix来更改亮度,颜色,饱和度,色调
- 6. 是否有将UIColor转换为色相饱和度亮度的功能?
- 7. 爱立信是否支持色彩调制(色调,饱和度,亮度)?
- 8. 橙色的色调/饱和度值
- 9. Bootstrap Alerts颜色饱和度
- 10. 如何使用UISlider快速调整亮度对比度饱和度
- 11. 正常化图像亮度和饱和度
- 12. 饱和度和亮度有什么区别?
- 13. 色彩饱和度/ DESAT jQuery中
- 14. jQuery彩色动画相对于元素的当前颜色(色调,饱和度,亮度)
- 15. 使用OpenCV均衡/归一化彩色图像中的色调饱和度亮度
- 16. 从Photoshop的色相/饱和度调整层的算法
- 17. Matlab fwrite饱和度
- 18. iPad的UIColor饱和问题
- 19. 编辑CCSprite的色调和/或饱和度
- 20. PHP锻炼色彩饱和度
- 21. R:减少调色板的颜色饱和度
- 22. 如何在python中的图像上添加文字以及一些饱和度和亮度调整?
- 23. 颜色分析 - 饱和度,色度,温暖,酷等
- 24. 从图像numpy数组中关于饱和度和值的色调值计算颜色可见度
- 25. 在OpenCV中标准化摄像头输入? (对比度/饱和度/亮度等)
- 26. 如何在DirectX中设置视频/图像的亮度和对比度以及饱和度
- 27. 什么是饱和和亮度CSS滤镜背后的算法?
- 28. Android图片颜色校正。如何更改Android中单个图像的亮度,饱和度等?
- 29. Monotouch:改变图像的色调,而不仅仅是饱和度
- 30. 从RGB到HSV的UIColor转换,将亮度设置为UIColor
可能的[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