3

我对理解 GPUImage 有疑问。具体来说,我不知道如何使用 GPUImageLookupFilter。例如,我在 GPUImageAmatorkaFilter 中有几个使用示例。但是在 GPUImageFilterGroup 中使用了 LookupFilter,我也不明白。我想知道我是否可以单独使用 LookupFilter。

我试过这个:

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'

我肯定需要初始化其他东西,但是...... 那么,任何人都可以帮助我使这一小段代码工作吗?提前致谢。

4

2 回答 2

2

感谢 Brad Larson 的回答:

一方面,您将两个图像都添加到纹理位置 1,因此其中一个覆盖了另一个。我相信,您需要将输入图像添加到纹理位置 0 并将查找模式添加到位置 1。

于 2013-04-15T05:56:49.973 回答
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];
}
于 2015-08-13T14:02:20.037 回答