我对理解GPUImage有疑问。 具体来说,我无法弄清楚如何使用GPUImageLookupFilter。我在GPUImageAmatorkaFilter中有几个用法示例。 但是LookupFilter在GPUImageFilterGroup中使用,我还没有理解。 我想知道我是否可以单独使用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'
我绝对需要初始化其他内容,但是.... 那么,任何人都可以帮助我使这一小段代码工作吗? 提前谢谢。
答案 0 :(得分:2)
感谢Brad Larson回答:
首先,您将两个图像添加到纹理位置1,因此一个覆盖另一个。您需要将输入图像添加到纹理位置0并将模式查找到位置1,我相信。
答案 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];
}