gpt4 book ai didi

swift - 如何保证一个 NSColor 有足够的饱和度?

转载 作者:行者123 更新时间:2023-11-28 05:27:31 25 4
gpt4 key购买 nike

我需要保证颜色有足够的饱和度。

我对 NSColor 做了这个扩展,但我的测试给了我奇怪的值:tempColor 似乎总是有很多饱和度。

所以基本上我的函数总是返回 self?

我的错误在哪里?

我也尝试过不转换为 NSCalibratedRGBColorSpace 但这没有帮助,输入颜色无论如何都可以是不同的类型。

extension NSColor {
func withMinimumSaturation(minimumSaturation: CGFloat) -> NSColor {
// color could be hue/rgb/other so we convert to rgb
if var tempColor = self.colorUsingColorSpaceName(NSCalibratedRGBColorSpace) {
// prepare the values
var hue: CGFloat = 0.0
var saturation: CGFloat = 0.0
var brightness: CGFloat = 0.0
var alpha: CGFloat = 0.0
// populate the values
tempColor.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha)
// if color is not enough saturated
if saturation < minimumSaturation {
// return same color with more saturation
return NSColor(calibratedHue: hue, saturation: minimumSaturation, brightness: brightness, alpha: alpha)
}
}
// if detection fails, return same color
return self
}
}

用法:

let source = myColorFromAListOfColors // NSColor
let guaranteed = source.withMinimumSaturation(0.15)

编辑:实际上它有效。我接受了 Aaron 的回答,因为它帮助我了解了情况(我正在将颜色与他们的 redComponents 进行比较,他们通常很相似)。

最佳答案

你的方法看起来不错。

对于饱和度很低的颜色,它返回不同的颜色:

enter image description here

如果我将最小饱和度从 0.15 增加到更显着的值,例如 0.45,则变化会更显着:

enter image description here

因此,此方法如我所料有效。我猜您只需要调整 0.15 输入即可获得您想要的结果。

它可以帮助您记录旧的和新的饱和度以进行调试:

if saturation < minimumSaturation {
// return same color with more saturation
println("New saturation: \(minimumSaturation)")

return NSColor(calibratedHue: hue, saturation: minimumSaturation, brightness: brightness, alpha: alpha)
} else {
println("Discarding saturation: \(saturation)")
}

关于swift - 如何保证一个 NSColor 有足够的饱和度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30552164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com