我是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];
然而,这会导致两个图像被缩放并相互叠加,并且结果被转换为图像的边缘而另一半是空的。
我很欣赏有关如何缩放和平铺较小图像以制作一个大图像的任何指示。
非常感谢!
答案 0 :(得分:4)
虽然您可以使用变换执行此操作,但您正在查看三个混合以将四个图像合并到一个静止帧中。这不是最快或最节省内存的途径。
相反,我建议继承GPUImageTwoInputFilter,或者根据它创建一个全新的多输入过滤器,然后使用该过滤器将所有四个图像拉出来进行渲染。人们通过这样做了三个或四个过滤器输入混合,这可能是你在这里最有效的途径。
过滤器的片段着色器可以呈现四个四边形,每个输入图像一个,或者具有从四个纹理中选择性采样的着色器,以在给定像素处提供适当的颜色。前者会更快,但可能需要您在修改基本混合过滤器时编写更多的OpenGL ES代码。后者会对顶点和片段着色器使用简单的调整,但这些着色器中的条件可能会减慢速度。