我已经实现了一个具有许多过滤器的过滤工具机制。每个过滤器包含2-3个不同的过滤器,即我正在使用GPUImageFilterGroup。现在,当我更新GPU图像库兼容iOS 8时,它显示“未找到实例方法prepareForImageCapture”并且应用程序崩溃。
我还试图实现以下代码
GPUImageFilterGroup *filter = [[GPUImageFilterGroup alloc] init];
GPUImageRGBFilter *stillImageFilter1 = [[GPUImageRGBFilter alloc] init];
// [stillImageFilter1 prepareForImageCapture];
stillImageFilter1.red = 0.2;
stillImageFilter1.green = 0.8;
[stillImageFilter1 useNextFrameForImageCapture];
[(GPUImageFilterGroup *)filter addFilter:stillImageFilter1];
GPUImageVignetteFilter *stillImageFilter2 = [[GPUImageVignetteFilter alloc] init];
// [stillImageFilter1 prepareForImageCapture];
stillImageFilter2.vignetteStart = 0.32;
[stillImageFilter1 useNextFrameForImageCapture];
[(GPUImageFilterGroup *)filter addFilter:stillImageFilter2];
[stillImageFilter1 addTarget:stillImageFilter2];
[(GPUImageFilterGroup *)filter setInitialFilters:[NSArray arrayWithObject:stillImageFilter1]];
[(GPUImageFilterGroup *)filter setTerminalFilter:stillImageFilter2];
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];
[stillImageSource addTarget:(GPUImageFilterGroup *)filter];
[stillImageSource processImage];
UIImage *img = [(GPUImageFilterGroup *)filter imageFromCurrentFramebuffer];
它返回的nil图像。谁能告诉我什么是正确的方法!!!
提前致谢。
答案 0 :(得分:3)
首先,这不是iOS 8的崩溃。你暂时没有更新你的GPUImage副本,并且这个方法在几个月前在与任何iOS兼容性无关的更新中被删除了。解释原因here,我再次引用相关段落:
这确实会给界面增添一点轻微的皱纹,而且我已经 更改了一些方法名称,以便更新任何人更新 码。因为帧缓冲区现在是瞬态的,如果你想要捕获 来自其中一个的图像,您必须在处理之前对其进行标记。您 通过在筛选器上使用-useNextFrameForImageCapture方法来执行此操作 表示下次将图像传递到过滤器时 链,你想要坚持使用那个帧缓冲 再多拿一张图片就可以了。 -imageByFilteringImage: 现在自动为你做这个,我又添加了另一个 在processImageUpToFilter:withCompletionHandler中的便捷方法: 以异步方式执行此操作。
如您所见,-prepareForImageCapture已被删除,因为它在新的缓存系统中没用。
您更新的代码返回nil的原因是您在错误的过滤器上调用了-useNextFrameForImageCapture。它需要在组中的终端过滤器(stillImageFilter2)上调用,并且只需要在调用-processImage之前调用一次。这表示这个特定的帧缓冲区需要长时间闲置才能从中捕获图像。
您真的不需要上面的GPUImageFilterGroup,因为它只会使您的过滤器链变得复杂。