我正在为iOS创建一个颜色选择器。我希望用户能够选择亮度(光度),并使颜色轮反映出这种变化。我正在使用Core Image来使用CIColorControls过滤器修改亮度。以下是我的代码:
-(CIImage *)oldPhoto:(CIImage *)img withBrightness:(float)intensity
{
CIFilter *lighten = [CIFilter filterWithName:@"CIColorControls"];
[lighten setValue:img forKey:kCIInputImageKey];
[lighten setValue:@((intensity * 2.0) - 1.0) forKey:@"inputBrightness"];
return lighten.outputImage;
}
下面是强度为0.5(inputBrightness = 0)时的色轮图:
问题是当强度小于0.5时,颜色轮的颜色看起来不正确。例如,这是强度为0.3(inputBrightness = -0.4)时的图像:
请注意,中间有一个黑色圆圈,并且图像的其余部分也没有被正确地变暗。这应该是一个HSL色轮,所以我猜我实际上想改变的是亮度,而不是亮度值。
首先,有人能解释一下为什么图像会出现这种情况吗?我不是颜色方面的专家;圆圈的中心很快变成了黑色,而它的边缘却没有变暗,这似乎有些奇怪。
其次,我如何实现所需的效果?
这就是我真正想要的图像:
这是使用自定义HSL函数和亮度=0.3创建的。这在CPU上运行得太慢了,所以我很高兴将这个HSL函数的代码发布出来,但我没有包含它,因为它似乎并不立即相关。如果您想看到它,请告诉我。
如果您有任何问题或任何内容不清楚,请告诉我。谢谢!