在macOS中将RGB转换为HSV

时间:2018-11-11 04:47:00

标签: swift macos

我有以下代码将RGB转换为HSV。这使用了UIColor,它是UIKit的一部分。 UIKit在macOS中不可用。在macOS中执行此操作的替代方法是什么?

func getHue(red: CGFloat, green: CGFloat, blue: CGFloat) -> CGFloat 
{
    let color = UIColor(red: red, green: green, blue: blue, alpha: 1)
    var hue: CGFloat = 0
    color.getHue(&hue, saturation: nil, brightness: nil, alpha: nil)
    return hue
}

3 个答案:

答案 0 :(得分:1)

在macOS中,使用NSColor代替UIColor

func getHue(red: CGFloat, green: CGFloat, blue: CGFloat) -> CGFloat{
    let color = NSColor(red: red, green: green, blue: blue, alpha: 1)
    var hue: CGFloat = 0
    color.getHue(&hue, saturation: nil, brightness: nil, alpha: nil)
    return hue
}

答案 1 :(得分:0)

您应该在macOS上使用NSColor,而不是UIColor。两者相似,不过NSColor可以在需要时提供更好的颜色管理。它包含类似的getHue(_, saturation, brightness, alpha)方法。

答案 2 :(得分:0)

我将以不同的方式实现它:

import AppKit

extension NSColor {
    var hsba: (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat) {
        var hue: CGFloat = 0
        var saturation: CGFloat = 0
        var brightness: CGFloat = 0
        var alpha: CGFloat = 0
        self.getHue(
            &hue,
            saturation: &saturation,
            brightness: &brightness,
            alpha: &alpha
        )
        return (hue, saturation, brightness, alpha)
    }
}

这使您不仅可以轻松访问色相,还可以轻松访问饱和度,亮度和Alpha。而且不需要您手动提供3个独立的rgb组件。您可以在任何现有的NSColor实例上调用它。您可以使用rgb组件初始化一个实例,但也可以使用其他任何NSColor实例,例如另一个API返回的实例,或NSColor.blue这样的静态值之一。)

print(NSColor.green.hsba.hue)