如何从CGColor MacOS中获取字符串



我正试图使应用程序更容易选择某些颜色,并让我使用NSPasteboard.setString命令,我需要将颜色格式化为字符串。有一种方法,我可以改变CGColor成一个字符串吗?谢谢!

这是我用CGColor做的一个有用的扩展。您可以获得RGBA组件,也可以将它们转换回来。

代码:

extension CGColor {
/// Components of a color. Contains `rgba`.
struct Components: Codable {
let red: CGFloat
let green: CGFloat
let blue: CGFloat
let alpha: CGFloat
init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
self.red = red
self.green = green
self.blue = blue
self.alpha = alpha
}
init?(rgba: [CGFloat]) {
guard rgba.count == 4 else { return nil }
red = rgba[0]
green = rgba[1]
blue = rgba[2]
alpha = rgba[3]
}
var all: [CGFloat] {
[red, green, blue, alpha]
}
}
var components: Components? {
var red: CGFloat = 0
var green: CGFloat = 0
var blue: CGFloat = 0
var alpha: CGFloat = 0
_ = NSColor(cgColor: self)?.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let components = [red, green, blue, alpha]
return Components(rgba: components)
}
static func create(from components: Components) -> CGColor {
self.init(
red: components.red,
green: components.green,
blue: components.blue,
alpha: components.alpha
)
}
}

用法:

if let components = CGColor(red: 1, green: 0.2, blue: 0.2, alpha: 1).components {
print(components)
let new = CGColor.create(from: components)
print(new)
}

打印:Components(red: 1.0, green: 0.2, blue: 0.2, alpha: 1.0)

打印:<CGColor 0x600003f1d500> [<CGColorSpace 0x600003f1ab80> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; Generic RGB Profile)] ( 1 0.2 0.2 1 )

最新更新