问题描述
我正在为图像构建“曲线”编辑器,并希望将每个颜色通道拆分为通过CIToneCurve
过滤器,然后再将它们重新组合为单个彩色图像。 (我知道CIColorCurves
过滤器,但这并没有给我我想要的控制权。)
我能够使用三个单独的CIColorCube
过滤器来分离通道,以生成3个单独的颜色通道,但是我不确定如何将它们放回一起以形成单个彩色图像。
使用maximumCompositingFilter
和minimumCompositing
滤镜有效,但是当我通过ToneCurve运行单个彩色照片时,调整高点或低点(取决于我使用的合成滤镜)会弄乱颜色
解决方法
您可以使用Accelerate.vImage做到这一点。
Apple有一篇文章讨论了将交错的图像转换为单独的平面缓冲区:https://developer.apple.com/documentation/accelerate/optimizing_image_processing_performance
...并且有一篇文章讨论了使用CIImageProcessorKernel
:https://developer.apple.com/documentation/accelerate/reading_from_and_writing_to_core_video_pixel_buffers的vImage / Core Image互操作性。我不记得CIImageProcessorKernel
是否支持单通道8位图像,例如R8
。
...此外,此Apple示例代码项目可能也很有趣:Applying Tone Curve Adjustments to Images。
,最终使用了 Frank Schlegel 发布的建议并使用了简单的加法合成。我必须编写自己的 CIFilter 才能做到这一点,但这很简单。
half4 rgbaComposite(sample_h redColor,sample_h greenColor,sample_h blueColor,sample_h alphaColor) {
return half4(redColor.r,greenColor.g,blueColor.b,alphaColor.a);
}
这是用于金属背衬的 CIFilter。每个输入都假定它只包含一个颜色通道。