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

时间:2020-11-03 07:20:39

标签: ios swift macos core-image

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用Accelerate.vImage做到这一点。

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

...并且有一篇文章讨论了使用CIImageProcessorKernelhttps://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

答案 1 :(得分:0)

最终使用了 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。每个输入都假定它只包含一个颜色通道。