在macOS中将RGB转换为HSV



我有以下代码将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
}

在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
}

您应该在macOS上使用NSColor而不是UIColor。这两者是相似的,尽管NSColor允许更好的颜色管理,如果你需要的话。它包括一个类似的getHue(_, saturation, brightness, alpha)方法。

我会以不同的方式实现这一点:

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)

最新更新