1

我正在使用 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);

实际输出:
Output-> Success:1, hue:1.000000, sat:0.017391, value:0.901961, alpha:1.000000

预期输出:
hue:0, sat:0.017391, value:0.901961, alpha:1.000000

注意:我从一些在线转换工具中得出了这个预期的输出(例如:http ://www.rapidtables.com/convert/color/rgb-to-hsv.htm )

您可以清楚地看到色调的差异吗?那么,为什么色调会有这样的差异,我怎样才能得到我的预期输出呢?

4

2 回答 2

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 可以避免麻烦。

于 2013-04-10T05:40:43.923 回答
3

HSB 或 HSL中的色调以色环周围的度数来衡量,从 0° 处的红色开始,然后在 360° 处绕回红色;所以 0° 的色调与 360° 的色调相同。UIColor将此范围 (0–360°) 映射到值 0–1 (0°=0.0​​, 360°=1.0)。

于 2013-04-10T05:27:57.320 回答