GPUImage使用UISlider更改亮度

时间:2013-06-20 06:18:14

标签: iphone ios xcode gpuimage

如何使用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;

}

3 个答案:

答案 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;  
}