我需要保证颜色有足够的饱和度。
我将此扩展程序设为NSColor
,但我的测试给出了奇怪的值:tempColor
似乎总是有很多饱和度。
所以基本上我的函数总是返回自我?
我的错误在哪里?
我也尝试过没有转换为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
进行比较,而且它们通常相似)。
答案 0 :(得分:2)
你的方法似乎很好。
对于饱和度非常低的颜色,它会返回不同的颜色:
如果我将最小饱和度从0.15
增加到更重要的值,例如0.45
,则更改更为重要:
所以,这种方法可以正常运行。我猜你只需调整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)")
}