2014-09-20 125 views
2

我已经实现了一个具有多个过滤器的过滤器工具机制。每个过滤器包含2-3个不同的过滤器,即我为此使用GPUImageFilterGroup。现在,当我更新了与iOS 8兼容的GPU图像库时,它显示“Instance Method prepareForImageCapture not found”和应用程序崩溃。iOS中的GPUImage崩溃8

enter image description here

我也试图实现下面的代码

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图像。谁能告诉我什么是正确的方法!

在此先感谢。

回答

3

首先,这不是iOS 8的崩溃。你有一段时间没有更新你的GPUImage副本,并且该方法在几个月前在与任何iOS兼容性无关的更新中被删除。这是原因解释here,我会再次引述相关段落:

这确实一个轻微的皱纹添加到界面,虽然,我已经 改变了一些方法名,使这个清楚任何人更新他们的 代码。由于帧缓冲区现在是暂时的,如果要从其中一个帧捕获图像,您必须在处理之前对其进行标记。您 通过在筛选器 上使用-useNextFrameForImageCapture方法来执行此操作,以指示下次图像通过筛选器 链时,您将想要保留该帧缓冲器以获取 稍长的时间以抓取图像出来了。 -imageByFilteringImage: 现在自动为您执行此操作,并且我在-processImageUpToFilter:withCompletionHandler: 中添加了另一个 便捷方法,以异步方式执行此操作。

如您所见,-prepareForImageCapture被删除,因为它在新的缓存系统中没有用处。

您更新的代码返回nil的原因是您在错误的过滤器上调用了-useNextFrameForImageCapture。它需要在组中的终端过滤器(stillImageFilter2)上调用,并且只需要在调用-processImage之前调用一次。这意味着这个特定的帧缓冲区需要足够长的时间才能从中捕获图像。

你在上面说实话不需要GPUImageFilterGroup,因为它只会使你的过滤器链接变得复杂。

+0

感谢您的回答。我很抱歉,我没有更早更新过代码。你能告诉我如何使用GPUImageFilterGroup旁边的过滤器链接。提前Thanx – Shubhendu 2014-09-20 10:41:08