我正在使用UIColour的内置函数将RGB转换为HSV:- (BOOL)getHue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
但是对于某些RGB,它没有给出正确的输出。
CGFloat h,s,v,a;
UIColor *tColor=[UIColor colorWithRed:(230.0/255.0) green:(226.0/255.0) blue:(226.0/255.0) alpha:1.0];
BOOL success=[tColor getHue:&h saturation:&s brightness:&v alpha:&a];
NSLog(@"Output-> Success:%d, hue:%f, sat:%f, value:%f, alpha:%f",success,h,s,v,a);
实际输出:
输出 - >成功:1,色调:1.000000,坐位:0.017391,值:0.901961,alpha:1.000000
预期输出:
色调:0,坐:0.017391,值:0.901961,alpha:1.000000
注意:我从一些在线转换工具(例如:http://www.rapidtables.com/convert/color/rgb-to-hsv.htm)
中获得了此预期输出你可以清楚地看到顺化的差异吗?那么,为什么Hue的这种差异以及如何获得我预期的输出呢?
答案 0 :(得分:4)
虽然世界上其他大部分地区都将“色调”定义为0到360度,但对于UIColor来说,它是0.0到1.0。
实际上,正如360.000度在几何或其他人的色调中相同0.000,因此我们使用UIColor的色调,1.000与0.000相同(幻觉小数点后的小数点为幻数,如果你喜欢,则为二进制,如果你更喜欢。)
因此,您的“实际输出”和“预期输出”是相同的。在编码中,将色调保持在0.000到0.999范围内,并将1.000更改为0.000以避免麻烦。
答案 1 :(得分:3)
Hue in HSB or HSL测量为一个色环周围的度数,从0°处的红色开始,然后以360°环绕回红色;所以0°的色调与360°的色调相同。 UIColor
将此范围(0-360°)映射到值0-1(0°= 0.0,360°= 1.0)。