GPUImage:混合两张图片

7

我曾使用GPUImage框架(某个旧版本)来混合两张图片(为某张图片添加边框覆盖物)。但是,当我升级到最新的框架版本后,在应用此类混合时,我得到了一张空的黑色图像。

我正在使用以下方法:

- (void)addBorder {
    if (currentBorder != kBorderInitialValue) {
        GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
        GPUImagePicture *imageToProcess = [[GPUImagePicture alloc] initWithImage:self.imageToWorkWithView.image];
        GPUImagePicture *border = [[GPUImagePicture alloc] initWithImage:self.imageBorder];

        blendFilter.mix = 1.0f;
        [imageToProcess addTarget:blendFilter];
        [border addTarget:blendFilter];

        [imageToProcess processImage];
        self.imageToWorkWithView.image = [blendFilter imageFromCurrentlyProcessedOutput];

        [blendFilter release];
        [imageToProcess release];
        [border release];
    }
}

什么是问题?
2个回答

11

你忘记处理边框图像了。在 [imageToProcess processImage] 之后,加入如下代码:

[border processImage];

将两个图像混合时,必须在它们都被添加到混合滤镜后使用-processImage。我改变了混合滤镜的工作方式,以修复一些错误,现在您需要按照这种方式处理。


@BradLarson:Brad,我能否添加超过两张图片到混合滤镜中以创建叠加效果?我有多个图层和一个背景。我想使用更多的[第1层和背景层]来创建一些不错的效果。谢谢! - el.severo
你好,有关于如何在没有 processImage 方法的实时 GPUImageStillCamera 中使用 GPUImageAlphaBlendFilter 的资源吗?我在这里提出了我的问题:http://stackoverflow.com/questions/16384813/gpuimagealphablendfilter-realtime-processing-from-gpuimagestillcamera-source - Can Poyrazoğlu
1
imageFromCurrentlyProcessedOutput在最新的guimage和ios8中出现错误。我也尝试使用了imageFromCurrentFramebufferWithOrientation:0,但仍然出现错误。 - Rahul Dadhich
@RahulRD,我认为imageFromCurrentlyProcessedOutput这个东西已经不存在了。我使用这个答案中的代码也遇到了崩溃问题。你最终是如何解决的? - Chris Harrison

7

这是我目前使用的代码,用于使用GPUImageAlphaBlendFilter合并两个图像。

GPUImagePicture *mainPicture = [[GPUImagePicture alloc] initWithImage:image];
GPUImagePicture *topPicture = [[GPUImagePicture alloc] initWithImage:blurredImage];

GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
[blendFilter setMix:0.5];

[mainPicture addTarget:blendFilter];
[topPicture addTarget:blendFilter];

[blendFilter useNextFrameForImageCapture];
[mainPicture processImage];
[topPicture processImage];

UIImage * mergedImage = [blendFilter imageFromCurrentFramebuffer];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接