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

时间:2015-02-17 15:07:55

标签: swift rgb uicolor

我正在执行以下操作,以便从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

我做错了吗?

2 个答案:

答案 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.0hue = 1.0描述相同的颜色。 如果需要将色调分量标准化为半开区间 0.0 <= hue < 1.0那么你可以用

做到这一点
hue = fmod(hue, 1.0)

答案 1 :(得分:4)

以@Martin R的答案为基础:

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

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

    所以,比方说,例如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