微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用于合成红色,绿色和蓝色颜色通道的CIFilters

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

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

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

解决方法

您可以使用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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。