2

我正在使用 GPUImage 库,我正在尝试实时混合两个图像,并将它们显示在GPUImageView. 我正在尝试将普通相机输入与它的过滤版本进行 alpha 混合。这是我正在尝试做的事情:

          ----------------->----v
--camera--|                     alpha blend ----> image view
          -----> color filter --^

我发现了一些关于使用混合过滤器的帖子,但它们似乎不是实时处理的方法。我找到了https://github.com/BradLarson/GPUImage/issues/319GPUImage: blending two imageshttps://github.com/BradLarson/GPUImage/issues/751(但它们要么不适合实时处理,(第一个和第二个),或者不起作用(第三个)。

我几乎尝试了所有方法,但我得到的只是 GPUImageView 中的白色图像。如果我不使用 alpha 混合滤镜,比如说,只使用假彩色滤镜或类似的东西,它就可以完美地工作。这是我的代码:

blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.5;
[blendFilter prepareForImageCapture];
[blendFilter addTarget:imageView];

passThrough = [[GPUImageFilter alloc] init];
[passThrough prepareForImageCapture];
[passThrough addTarget:blendFilter];

selectedFilter = [[GPUImageFalseColorFilter alloc] init];
[selectedFilter prepareForImageCapture];
[selectedFilter addTarget:blendFilter];

stillCamera = [[GPUImageStillCamera alloc] init];
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

[stillCamera addTarget:passThrough];
[stillCamera addTarget:selectedFilter];
[stillCamera startCameraCapture];

我得到的只是一个白色的空白屏幕。如果我更改[selectedFilter addTarget:blendFilter];为,[selectedFilter addTarget:imageView];则图像上会显示假彩色滤镜。

Alpha 混合滤镜似乎有问题。我在一些需要调用processImage输入的帖子中读到了这一点,但据我所知,这些帖子都是针对非实时输入的。如何让 GPUImageAlphaBlendFilter 实时工作?

4

1 回答 1

2

Ok, after investigating the issue further over the internet and on project's issue list (https://github.com/BradLarson/GPUImage/issues) and found a workaround. While setting the blend filter as the target, I needed to specify the texture index specifically. For some reason (probably a bug), adding the target blend filter two times doesn't add the second texture correctly at the next index. So setting the texture indices explicitly as 0 and 1 did work:

[passThrough addTarget:blendFilter atTextureLocation:0];
[selectedFilter addTarget:blendFilter atTextureLocation:1];

For the filters that are targets of single sources, addTarget: is enough though such as [stillCamera addTarget:selectedFilter];.

于 2013-05-13T13:05:58.480 回答