0

我正在尝试将 3 个滤镜应用于图像。

一个 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

5

你少了一步。您需要调用-processImage您的 GPUImagePicture 实例以使其通过过滤器链传播。

您还需要在更改过滤器链中的值并希望更新最终输出时调用它。

于 2013-09-08T21:22:43.507 回答
1

我第一次使用这个 GPUImage 库时,我花了很长时间才弄清楚如何简单地将多个过滤器应用于单个图像。OP 提供的链接确实有助于解释为什么 API 相对复杂(原因之一:您必须指定应用过滤器的顺序)。

为了将来参考,这是我应用两个过滤器的代码:

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 回答