2013-04-12 15 views
2

我在理解GPUImage時遇到了問題。 具體而言,我無法弄清楚如何使用GPUImageLookupFilter。例如,我在GPUImageAmatorkaFilter中有幾個使用示例。 但在我還沒有理解的GPUImageFilterGroup中使用了LookupFilter。 我想知道我是否可以單獨使用LookupFilter。如何在不使用GPUImageFilterGroup的情況下使用GPUImageLookupFilter?

我已經試過這樣:

GPUImageLookupFilter *lookup = [[GPUImageLookupFilter alloc] init]; 

UIImage *image = [UIImage imageNamed:@"amatorka.png"]; 
GPUImagePicture *lookupImageSource = [[GPUImagePicture alloc] initWithImage:image];  
[lookupImageSource addTarget: lookup atTextureLocation: 1]; 
[lookupImageSource processImage]; 

GPUImagePicture *inputImg = [[GPUImagePicture alloc] initWithImage:inputImage]; 
[inputImg addTarget:lookup atTextureLocation: 1]; 
[inputImg processImage]; 

UIImage *quickFilteredImage = [lookup imageFromCurrentlyProcessedOutput]; 

但它不工作,它崩潰這樣的:

Assertion failure in -[GPUImageLookupFilter createFilterFBOofSize:], PathToSource/GPUImageFilter.m:369 
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Incomplete filter FBO: 36054' 

我一定要初始化別的東西,但是......。 那麼,任何人都可以幫助我使這一小塊代碼工作? 在此先感謝。

+2

首先,您要添加的兩種圖像的紋理位置1,所以一個是壓倒對方。我相信,您需要將您的輸入圖像添加到紋理位置0並將查找圖案添加到位置1。 –

+0

是的,就是這樣!非常感謝。你可以請你的評論作爲答案,所以我可以接受嗎? – folex

回答

2

感謝Brad Larson的回答:

首先,您要添加的兩種圖像的紋理位置1,所以一個是壓倒對方。我相信,您需要將您的輸入圖像添加到紋理位置0並將查找圖案添加到位置1。

0

這是怎麼了,我個人使用它:

- (UIImage *)filterImage:(GPUImagePicture *)originalImageSource withLUTNamed:(NSString *)lutName 
{ 
    GPUImagePicture *lookupImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:lutName]]; 
    GPUImageLookupFilter *lookupFilter = [[GPUImageLookupFilter alloc] init]; 

    [originalImageSource addTarget:lookupFilter]; 
    [lookupImageSource addTarget:lookupFilter]; 

    [lookupFilter useNextFrameForImageCapture]; 
    [originalImageSource processImage]; 
    [lookupImageSource processImage]; 

    return [lookupFilter imageFromCurrentFramebufferWithOrientation:UIImageOrientationUp]; 
} 
相關問題