与GPUImageView的混合没有给出预期的结果

时间:2014-01-26 21:46:39

标签: ios gpuimage

当我使用GPUImageView的混合时,它们似乎不起作用。例如test1将结果抓取到图像中并将其放入imageView中...其中test2将GPUImageView设置为目标...似乎不起作用。 test1给了我预期的图像...我的测试图像test2给了我一个黑屏。

+ (void)test1:(UIImage*)image imageView:(UIImageView*)imageView {
    GPUImagePicture *pictureBase = [[GPUImagePicture alloc] initWithImage:image];
    GPUImagePicture *pictureOverlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]];

    GPUImageMultiplyBlendFilter *filter = [[GPUImageMultiplyBlendFilter alloc] init];

    [pictureBase addTarget:filter];
    [pictureOverlay addTarget:filter];

    [pictureBase processImage];
    [pictureOverlay processImage];

    imageView.image = [filter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp];
}

+ (void)test2:(UIImage*)image gpuImageView:(GPUImageView*)gpuImageView {
    GPUImagePicture *pictureBase = [[GPUImagePicture alloc] initWithImage:image];
    GPUImagePicture *pictureOverlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]];

    GPUImageMultiplyBlendFilter *filter = [[GPUImageMultiplyBlendFilter alloc] init];

    [pictureBase addTarget:filter];
    [pictureOverlay addTarget:filter];

    [filter addTarget:gpuImageView];

    [pictureBase processImage];
    [pictureOverlay processImage];
}

1 个答案:

答案 0 :(得分:1)

我相信这里发生的事情是你的GPUImagePicture实例在该方法结束时被解除分配(如果这是一个启用ARC的项目)。当发生这种情况时,它会从过滤器链的其余部分下方拉出地毯,并在视图中显示黑色图像(您可能会看到正确的图像,然后闪烁为黑色)。

在你提取UIImage的情况下不会发生这种情况,因为UIImage的提取阻塞直到处理完成,之后你的过滤器链发生了什么并不重要。

为了防止这种情况,请将您的GPUImagePicture设置为包含类的实例变量,以使其挂起的时间长于方法的结尾。