我正在执行以下操作,以便从hue
检索UIColor()
:
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,我的意思是获得0.0,1.0,1.0
RGB(红色)1.0,0.0,0.0
。
我做错了吗?
答案 0 :(得分:10)
首先UIColor
中红色/绿色/蓝色成分的范围是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.0
和hue = 1.0
描述相同的颜色。
如果需要将色调分量标准化为半开区间
0.0 <= hue < 1.0
那么你可以用
hue = fmod(hue, 1.0)
答案 1 :(得分:4)
以@Martin R的答案为基础:
如果您想使用HSB,则需要:
Saturation
和Brightness
值所以,比方说,例如Sketch会告诉你HSB中的颜色值是:Hue:20,饱和度:72和亮度:96
在Xcode中,按如下方式创建颜色:
let myAwesomeColour = UIColor(hue: 20/360, saturation: 0.72, brightness: 0.96, alpha: 1.0)
是否使用RGB或HSB是首选问题。结果与Xcode相同,它们都转换为UIColor
。