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

fuz*_*uzz 5 rgb uicolor swift

我正在执行以下操作以便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)")
Run Code Online (Sandbox Code Playgroud)

输出:

1.0,1.0,1.0

根据这个链接,我打算获得0.0,1.0,1.0RGB(红色)1.0,0.0,0.0.

难道我做错了什么?

Mar*_*n R 11

首先,红色/绿色/蓝色组件的范围UIColor是0.0 .. 1.0,而不是0.0 .. 255.0,所以你可能想要

let rgbColour = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)

但即便如此,你得到了输出1.0,1.0,1.0,这是正确的.色调分量范围为0.0到1.0,对应于色轮中0°到360°的角度(例如参见HSL和HSV).

因此hue = 0.0,hue = 1.0描述相同的颜色.如果您需要将色调分量标准化为半开区间, 0.0 <= hue < 1.0那么您可以使用

hue = fmod(hue, 1.0)
Run Code Online (Sandbox Code Playgroud)


kak*_*bei 7

以@Martin R 的回答为基础:

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

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

所以,比如说 Sketch 告诉你 HSB 中的颜色值是:Hue: 20, Saturation: 72 and Brightness: 96

在 Xcode 中,创建颜色如下:

let myAwesomeColour = UIColor(hue: 20/360, saturation: 0.72, brightness: 0.96, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)

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

  • 作为更通用的解决方案。如果变量中有动态值,而不是常量,那么除以 100 就是规则的广义表达式。 (2认同)