当我使用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];
}
答案 0 :(得分:1)
我相信这里发生的事情是你的GPUImagePicture实例在该方法结束时被解除分配(如果这是一个启用ARC的项目)。当发生这种情况时,它会从过滤器链的其余部分下方拉出地毯,并在视图中显示黑色图像(您可能会看到正确的图像,然后闪烁为黑色)。
在你提取UIImage的情况下不会发生这种情况,因为UIImage的提取阻塞直到处理完成,之后你的过滤器链发生了什么并不重要。
为了防止这种情况,请将您的GPUImagePicture设置为包含类的实例变量,以使其挂起的时间长于方法的结尾。