用于合成红色、绿色和蓝色通道的 CIFilters

CIFilters for compositing Red, Green, and Blue color channels

我正在为图像构建一个“曲线”编辑器,并希望通过 CIToneCurve 过滤器将每个颜色通道拆分为 运行,然后再将它们合成回单个彩色图像。 (我知道 CIColorCurves 过滤器,但这并没有给我想要的控制权。)

我可以使用三个单独的 CIColorCube 滤镜来分离通道以生成 3 个单独的颜色通道,但我不确定如何将它们放回一起以形成单个彩色图像。

使用 maximumCompositingFilterminimumCompositing 滤镜有效,但是当我 运行 通过 ToneCurve 处理单张彩色照片时,调整高点或低点(取决于我使用的合成滤镜) used) 弄乱了颜色。

你可以用 Accelerate.vImage 来做到这一点。

Apple 有一篇文章讨论了将交错图像转换为单独的平面缓冲区:https://developer.apple.com/documentation/accelerate/optimizing_image_processing_performance

...还有一篇文章讨论了使用 CIImageProcessorKernel 的 vImage / Core Image 互操作性:https://developer.apple.com/documentation/accelerate/reading_from_and_writing_to_core_video_pixel_buffers. I can't remember if CIImageProcessorKernel supports single channel 8-bit images such as 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。每个输入假定它只包含一个颜色通道。