如何使用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;
}
答案 0 :(得分:3)
上述代码存在一些问题。
首先,您实际上并没有对图像使用亮度过滤器,因为您在selectedFilter上调用-imageByFilteringImage:
,这是您新分配的通用GPUImageFilter。从不使用settingsFilter的GPUImageBrightnessFilter。
其次,您不希望每次更新参数时都分配新的过滤器。分配您的GPUImageBrightnessFilter一次,只需在值更改时更新它。
第三,您不希望继续重新过滤UIImages。往返于UIImages是一个缓慢的过程(在同一个过滤器上使用-imageByFilteringImage:
时无法正常工作,因为我做了一些缓存)。而是,基于原始图像创建GPUImagePicture,将GPUImageBrightnessFilter添加到目标,并在GPUImageView上定位GPUImageBrightnessFilter。每次更新亮度过滤器时都使用-processImage
,您的更新速度会快得多。当您需要提取最终图像时,请使用-imageFromCurrentlyProcessedOutput
。
答案 1 :(得分:1)
这是改变亮度,对比度等效果的一般教程。
http://docs.xamarin.com/recipes/ios/media/coreimage/adjust_contrast_and_brightness_of_an_image
希望这会有所帮助。另外,检查一下 Change contrast, brightness, saturation, or color of UIImage。您可以检查此链接,因为它使用滑块来更改亮度。它将使用OpenGL ...
答案 2 :(得分: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;
}