GPUImage:如何将不同的过滤器应用于图像,缩小它们的比例,并将结果平铺到输出图像



我是GPUImage库的新手。

我用它从相机中获取帧,并实时过滤它们。我正在为我正在开发的过滤器使用不同的过滤器参数。

我想好了如何用不同的过滤器并行过滤相机图像,但我现在想做的是输出一个结果图像,将4个过滤后的图像拼接在一起,形成一个大的输出图像。

我的想法是,我可以链接GPUImageTransformFilter实例和GPUImageAddBlendFilter实例来获得合成图像。例如,在最简单的情况下,缩小两个图像并并排放置:

self.transform1 = [[GPUImageTransformFilter alloc] init];
_transform1.affineTransform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5);
self.transform2 = [[GPUImageTransformFilter alloc] init];
_transform2.affineTransform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5), 1.0, 0.0);
self.blendFirst1 = [[GPUImageAddBlendFilter alloc] init];
[_transform1 addTarget:_blendFirst1];
[_transform2 addTarget:_blendFirst1];

然而,这导致两个图像被缩放并相互覆盖,并且结果被转换到图像的边缘,而另一半是空的。

我很感激任何关于如何缩放和平铺较小图像以制作一个大图像的建议。

非常感谢!

虽然可以通过变换来实现这一点,但您需要考虑三种混合,以将四个图像转换为一个静止帧。这不会是最快或最节省内存的方法。

相反,我建议对GPUImageTwoInputFilter进行子类化,或者在此基础上创建一个全新的多输入过滤器,然后使用该过滤器将所有四个图像拉入进行渲染。通过这样做,人们已经制作了三到四个过滤器输入混合物,这可能是你在这里最有效的途径。

过滤器的片段着色器可以渲染四个四边形,每个输入图像一个,或者具有从四个纹理中选择性采样的着色器,以在给定像素处提供适当的颜色。前者会更快,但在修改基本混合过滤器时可能需要编写更多的OpenGL ES代码。后者将使用对顶点和片段着色器的简单调整,但这些着色器中的条件可能会减慢速度。

最新更新