我正在为 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 函数的代码,但我没有包含它,因为它似乎没有立即相关。如果你想看,就问吧。
如果您有任何问题,或者有任何不清楚的地方,请告诉我。谢谢!