GPUImageAlphaBlendFilter从GPUImageStillCamera源实时处理

时间:2013-05-05 13:04:26

标签: ios gpuimage

我正在使用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实时工作?

1 个答案:

答案 0 :(得分:2)

好的,在通过互联网和项目问题列表(https://github.com/BradLarson/GPUImage/issues)进一步调查问题后,找到了解决方法。在将混合滤镜设置为目标时,我需要专门指定纹理索引。由于某种原因(可能是一个错误),添加目标混合滤镜两次不会在下一个索引处正确添加第二个纹理。因此,将纹理索引显式设置为0和1确实有效:

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

对于作为单一来源定位的过滤器,addTarget:就足够了[stillCamera addTarget:selectedFilter];