Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于合成红色、绿色和蓝色通道的CIFILTER_Ios_Swift_Macos_Core Image - Fatal编程技术网

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

Ios 用于合成红色、绿色和蓝色通道的CIFILTER,ios,swift,macos,core-image,Ios,Swift,Macos,Core Image,我正在为一幅图像构建一个“曲线”编辑器,并希望在将它们重新合成为一幅单色图像之前,分割出每个颜色通道,以通过CIToneCurve过滤器运行。(我知道CIColorCurves过滤器,但这并没有提供我想要的控制。) 我可以使用三个单独的CIColorCube过滤器来分离通道,以生成3个单独的颜色通道,但我不确定如何将它们重新组合在一起以形成单色图像 使用maximumCompositingFilter和minimumCompositing过滤器可以工作,但是当我通过ToneCurve运行单个彩色

我正在为一幅图像构建一个“曲线”编辑器,并希望在将它们重新合成为一幅单色图像之前,分割出每个颜色通道,以通过
CIToneCurve
过滤器运行。(我知道
CIColorCurves
过滤器,但这并没有提供我想要的控制。)

我可以使用三个单独的
CIColorCube
过滤器来分离通道,以生成3个单独的颜色通道,但我不确定如何将它们重新组合在一起以形成单色图像


使用
maximumCompositingFilter
minimumCompositing
过滤器可以工作,但是当我通过ToneCurve运行单个彩色照片时,调整高或低(取决于我使用的合成过滤器)会弄乱颜色。

您可以使用Accelerate.vImage来实现这一点

苹果公司有一篇文章讨论了如何将交错图像转换为独立的平面缓冲区:

…还有一篇文章讨论了vImage/Core映像的互操作性,它使用了
CiImageProcessWorkernel
:。我不记得
ciimageprocessornel
是否支持单通道8位图像,例如


…此外,这个苹果示例代码项目可能很有趣:。

最终使用了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);
}

这是一个金属支持的过滤器。每个输入都假定它只包含一个颜色通道。

您尝试过简单的添加混合吗?如果分离的图像在其各自的通道中仍然具有其颜色值,则将它们相加应再次生成完整的RGB图像。