0

画像に 3 つのフィルターを適用しようとしています。

1 つの rgbFilter には値が一定で、明るさフィルターと彩度フィルターがあり、どちらも変更できる必要があり、画像が更新される必要があります。

ここのアドバイスに従いました。

IB を使用して UIView をセットアップし、そのクラスを GPUImageView に設定しました。なぜか画像が表示されません。

私の手順は次のとおりです。

self.gpuImagePicture = [[GPUImagePicture alloc] initWithImage:image];
[self.gpuImagePicture addTarget:self.brightnessFilter];
[self.brightnessFilter addTarget:self.contrastFilter];
[self.contrastFilter addTarget:self.imageView];

そして、これを呼び出して、rgb フィルターに定数値を設定します

[self setRGBFilterValues]

この前に、次を使用してフィルターをセットアップします。

- (void) setupFilters
{
    self.brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    self.contrastFilter = [[GPUImageContrastFilter alloc] init];
    self.rgbFilter = [[GPUImageRGBFilter alloc] init];
}

手順が間違っているのでしょうか、それとも画像に何も表示されないのはなぜですか?

4

2 に答える 2

1

この GPUImage ライブラリを初めて使用したときは、1 つの画像に複数のフィルターを単純に適用する方法を理解するのに時間がかかりすぎました。OP によって提供されるリンクは、API が比較的複雑である理由を説明するのに役立ちます (1 つの理由: フィルターが適用される順序を指定する必要があります)。

今後の参考のために、2 つのフィルターを適用するコードを次に示します。

UIImage *initialImage = ...
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:initialImage];

GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init];
saturationFilter.saturation = 0.5;
[stillImageSource addTarget:saturationFilter];

GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurRadiusInPixels = 10;
[saturationFilter addTarget:blurFilter];

GPUImageFilter *lastFilter = blurFilter;
[lastFilter useNextFrameForImageCapture];
[stillImageSource processImage];
UIImage *processedImage = [lastFilter imageFromCurrentFramebuffer];
于 2015-06-13T22:46:12.253 に答える