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 つには、両方の画像をテクスチャの場所 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 に答える