ios - GPUImage:如何将不同的滤镜应用于图像,缩小它们并将结果平铺到输出图像

标签 ios 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 代码。后者将对顶点和片段着色器进行简单的调整,但这些着色器中的条件可能会减慢速度。

关于ios - GPUImage:如何将不同的滤镜应用于图像,缩小它们并将结果平铺到输出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893905/

相关文章:

ios - (Swift) 如何在 UITableView 和 UITableViewCell 之间来回传递数据?

ios - UITableView 在 IOS 7 中可见,但在 IOS 6 中不可见

ios - 将过滤器应用于 UIScrollView GPUImage 中的当前图像索引

objective-c - GPUImage capturePhotoAsImageProcessedUpToFilter 仅适用于最后一个过滤器

iOS 应用程序崩溃与 [GPUImageContext presentBufferForDisplay]

ios - GPUImageGaussianBlurFilter 似乎不适用于分层过滤器

ios - XC文本 : query for text in navigation bar

ios - subview 的 CGRectIntersectsRect

ios - 使用 NSFetchedResultsController 的 UITableView 白板

ios - 声明 `typedef SomeClass<SomeProtocol> MyType` 的 Swift 等价物是什么?