我正在用两种颜色创造一种新颜色;源颜色和目标颜色。新颜色由目标颜色的色调和饱和度分量组成,但使用源颜色的亮度(也称亮度或亮度)。
var hue: CGFloat = 0.0
var saturation: CGFloat = 0.0
var newBrightness: CGFloat = 0.0
var oldBrightness: CGFloat = 0.0
var alpha: CGFloat = 0.0
oldColor.getHue(
&hue,
saturation: &saturation,
brightness: &oldBrightness,
alpha: &alpha
)
newColor.getHue(
&hue,
saturation: &saturation,
brightness: &newBrightness,
alpha: &alpha
)
let color = UIColor(
hue: hue,
saturation: saturation,
brightness: oldBrightness,
alpha: alpha
)
我使用新颜色作为扫描线泛光填充实现的一部分,其中给定图像中的每个像素提供源颜色,并且用户选择目标颜色。
当用户选择深色(即黑色)时,该实现的问题就会显现出来。将源颜色的亮度与目标颜色一起使用可能会产生完全不同的颜色。
我怀疑新颜色的亮度超出了该颜色可接受的值范围。如果仅使用目标颜色的亮度,图像的绘制区域将完全平坦。如何保持相对于原始像素的亮度,使图像整体保持深度?