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

当我使用GPUImageView混合时,他们似乎不工作。 例如,将结果抓取到图像中的test1,并把它放到一个imageView的作品…哪里设置GPUImageView作为目标的test2似乎并不工作。 test1给我预期的图像…与我的testing图像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]; } 

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

这在你提取UIImage的情况下不会发生,因为UIImage块的提取直到处理完成,然后filter链会发生什么并不重要。

为了防止出现这种情况,请将您的GPUImagePicture作为您的环绕类的一个实例variables,以使其挂起的时间长于方法的结束时间。