GPUImageAlphaBlendFilter从GPUImageStillCamera源实时处理

我正在使用GPUImage库,我试图实时混合两个图像,并将它们显示在GPUImageView 。 我正在尝试将纯相机input与其过滤版本进行alpha混合。 这是我想要做的:

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

我发现了一些关于使用混合filter的文章,但是他们似乎并不是实时处理的方法。 我发现https://github.com/BradLarson/GPUImage/issues/319,GPUImage :混合两个图像 ,和https://github.com/BradLarson/GPUImage/issues/751 (但他们不是实时处理,(第一和第二),或不工作(第三)。

我已经尝试了几乎所有的东西,但是我得到的只是GPUImageView中的一个白色图像。 如果我不使用阿尔法混合filter,比如只使用一个错误的颜色filter或类似的东西,它就可以完美的工作。 这是我的代码:

 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]; 然后在图像上显示错误的颜色filter。

阿尔法混合filter似乎有什么问题。 我读过一些我需要在input上调用processImage的post,但据我所知,这些post都是非实时input的。 我怎样才能让GPUImageAlphaBlendFilter实时工作?

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

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

对于作为单个源的目标的filter, [stillCamera addTarget:selectedFilter]; addTarget:就足够了,但是[stillCamera addTarget:selectedFilter];