查找 UIColor 的色调、饱和度、亮度和 alpha

lsa*_*ama 1 rgb xcode colors uicolor swift

我有一个红色对象:red_object = UIColor.red.cgColor

我想获得这个“红色”的色调饱和度亮度和 alpha 参数,以便我可以使用更具体的参数重新编码我的红色对象。

这个练习是一次性的,但我需要这些参数。

我试过 cgColor.components 但我认为这不是正确的功能:

red_test = UIColor.red.cgColor
let output = red_test.components
print(output) = Optional([1.0, 0.0, 0.0, 1.0])
Run Code Online (Sandbox Code Playgroud)

但如果我运行以下

let circlePathT = UIBezierPath(arcCenter: CGPoint(x: x_mid,y: y_mid), radius: CGFloat(20), startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true)
let red_object = CAShapeLayer()
red_object.fillColor = UIColor(hue: 1, saturation: 0, brightness: 0, alpha: 1).cgColor
Run Code Online (Sandbox Code Playgroud)

我得到一个黑色圆圈,而不是红色。更具体地说,我期待

red_object.fillColor = UIColor(hue: 1, saturation: 0, brightness: 0, alpha: 1).cgColor
Run Code Online (Sandbox Code Playgroud)

等于

red_test = UIColor.red.cgColor
Run Code Online (Sandbox Code Playgroud)

但它不是

Dav*_*ist 7

为什么你得到“错误”的组件值

您会发现componentsaCGColor的值是颜色颜色空间中分量的值。由于没有色相-饱和度-亮度-alpha 颜色空间模型,这些不会是颜色的色相饱和度或亮度。

相反,您可能会在 RGB 颜色空间模型(如UIColor.red)中找到颜色的红-绿-蓝-alpha 值,或者在单色颜色空间模型(如UIColor.gray)中找到颜色的白色-alpha 值。

UIColor.red.cgColor.components        // [1.0, 0.0, 0.0, 1.0]
UIColor.red.cgColor.colorSpace?.name. // kCGColorSpaceExtendedSRGB

UIColor.gray.cgColor.components       // [0.5, 1.0]
UIColor.gray.cgColor.colorSpace?.name // kCGColorSpaceExtendedGray
Run Code Online (Sandbox Code Playgroud)

查看红色 ( 1, 0, 0, 1) 的分量值,它们不是色调、饱和度、亮度和 alpha 是有道理的——因为任何亮度为 0 的颜色将是完全黑色的,而任何饱和度为 0 的颜色将完全去饱和。

相反,我们希望 的亮度和饱和度均为red100%,就像它们在颜色选择器中的显示方式:

颜色选择器中“红色”的 HSB 值

如何获取颜色的色调、饱和度、亮度和 alpha

如果你想获得一种颜色的色调、饱和度、亮度和 alpha - 无论它处于getHue(_:saturation:brightness:alpha:)哪个颜色空间 - 你都可以使用并传递四个指向CGFloat值的可变指针:

var hue        : CGFloat = 0
var saturation : CGFloat = 0
var brightness : CGFloat = 0
var alpha      : CGFloat = 0
let couldBeConverted = UIColor.red.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
if couldBeConverted {
    // The color is in a compatible color space, and the variables
    // `hue`, `saturation`, `brightness`, and `alpha` have been
    // changed to contain these values.
}
Run Code Online (Sandbox Code Playgroud)

请注意,此方法在UIColor. 如果您有CGColor参考,则必须创建一个UIColor以读取其 HSBA 组件:

UIColor(cgColor: yourCGColor) 
Run Code Online (Sandbox Code Playgroud)

  • @Isama 我看到您没有接受任何问题。如果它回答了你的问题,那么你应该考虑接受它,让其他人知道这个问题已经得到解答。有关更多信息,请参阅:[当有人回答我的问题时我该怎么办?](https://stackoverflow.com/help/someone-answers?) (3认同)