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