0

如何使用 GPUImageBrightnessFilter 更改带有滑块的图像的亮度?

我试过了,

-(void)updateBrightness {
GPUImageFilter *selectedFilter = nil;
[selectedFilter removeAllTargets];
selectedFilter = [[GPUImageFilter alloc] init];

CGFloat midpoint = [(UISlider *)sender value];
[(GPUImageBrightnessFilter *)settingsFilter setBrightness:midpoint];        

UIImage *filteredImage = [selectedFilter imageByFilteringImage:_image_view.image];
fx_imageView.image = filteredImage;

}
4

2 回答 2

4

上面的代码有几个问题。

首先,您实际上并没有对图像使用亮度过滤器,因为您调用-imageByFilteringImage:的是 selectedFilter,它是您分配的新的通用 GPUImageFilter。您的 settingsFilter 的 GPUImageBrightnessFilter 从未使用过。

其次,您不希望每次更新参数时都分配新的过滤器。分配一次您的 GPUImageBrightnessFilter 并在值更改时简单地更新它。

第三,您不想继续重新过滤 UIImages。往返 UIImages 是一个缓慢的过程(-imageByFilteringImage:在同一个过滤器上使用时无法正常工作,因为我做了一些缓存)。相反,根据您的原始图像创建一个 GPUImagePicture,将 GPUImageBrightnessFilter 添加到该图像作为目标,并将您的 GPUImageBrightnessFilter 定位到 GPUImageView。每次更新亮度滤镜时使用-processImage,更新速度会快得多。当您需要提取最终图像时,请使用-imageFromCurrentlyProcessedOutput.

于 2013-06-20T18:58:05.197 回答
0

这些可以帮助你...

-(void)viewDidLoad
{        
 [sliderChange setMinimumValue:-0.5];
 [sliderChange setMaximumValue:0.5];
 [sliderChange setValue:0.0];
 brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
}
-(IBAction)upDateSliderValue:(id)sender 
{
 GPUImagePicture *fx_image;
 fx_image = [[GPUImagePicture alloc] initWithImage:originalImage];
 [brightnessFilter setBrightness:self.sliderChange.value];
 [fx_image addTarget:brightnessFilter];
 [fx_image processImage];

 UIImage *final_image = [brightnessFilter imageFromCurrentlyProcessedOutput];
 self.selectedImageView.image = final_image;  
}
于 2015-04-01T12:35:54.710 回答