从 UIColor 获取色调会产生错误的结果

Getting hue from UIColor yields wrong result

我正在执行以下操作,以便从 UIColor() 中检索 hue

let rgbColour = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
var hue: CGFloat = 0
var saturation: CGFloat = 0
var brightness: CGFloat = 0
var alpha: CGFloat = 0
rgbColour.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)

println("\(hue),\(saturation),\(brightness)")

输出:

1.0,1.0,1.0

根据此 link,我打算为 RGB(红色)1.0,0.0,0.0.

获取 0.0,1.0,1.0

我是不是做错了什么?

首先UIColor中red/green/blue个分量的取值范围是0.0 .. 1.0, 不是 0.0 .. 255.0,所以你可能想要

let rgbColour = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)

但即便如此,您仍会得到输出 1.0,1.0,1.0,这是 正确的。 色调分量的范围是0.0到1.0,对应的角度是0º到360º 在色轮中(参见示例 HSL and HSV)。

因此 hue = 0.0hue = 1.0 描述了一种 相同的 颜色。 如果需要将色调分量归一化到半开区间 0.0 <= hue < 1.0 那么你可以用

hue = fmod(hue, 1.0)

以@Martin R 的回答为基础:

如果您想使用 HSB,您需要:

  1. 将色调值除以 360
  2. SaturationBrightness 值使用小数

例如,Sketch 告诉您 HSB 中的颜色值是:色调:20,饱和度:72 和亮度:96

在Xcode中,创建颜色如下:

let myAwesomeColour = UIColor(hue: 20/360, saturation: 0.72, brightness: 0.96, alpha: 1.0)

使用 RGB 还是 HSB 是一个偏好问题。就 Xcode 而言,结果是相同的,它们都转换为 UIColor.