前言
這兩天在研究如何利用UISlider來調(diào)節(jié)圖片的亮度,這里給出兩個版本,一種是將亮度設定死何缓,第二種是可以利用UISlider來調(diào)節(jié)亮度福荸,僅供初學者們一起探討交流蕴坪。
一 將亮度設定死:
- (void)brightness1{
// 目標圖片
UIImage *image = [UIImage imageNamed:@"placeholder"];
// 1.在GPUImageBrightnessFilter中首先初始化該濾鏡
GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
// 2.設置亮度值為0.5
brightnessFilter.brightness = 0.5;
// 3.設置亮度調(diào)整范圍為整張圖像
[brightnessFilter forceProcessingAtSize:image.size];
[brightnessFilter useNextFrameForImageCapture];
// 4.獲取數(shù)據(jù)源
GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image];
// 5.添加上濾鏡
[pic addTarget:brightnessFilter];
// 6.處理圖像,開始渲染
[pic processImage];
NSLog(@"Hello World");
// 7.獲取處理后的圖像
UIImage *imageBrightness = [brightnessFilter imageFromCurrentFramebuffer];
// 8.加載出來
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = imageBrightness;
imageView.frame = CGRectMake(0, 0, imageBrightness.size.width, imageBrightness.size.height);
[self.view addSubview:imageView];
}
二 利用UISlider來調(diào)節(jié)亮度:
@interface ViewController ()
//數(shù)據(jù)源敬锐,用強引用
@property (nonatomic, strong) GPUImagePicture *pic;
//亮度濾鏡
@property (nonatomic, weak) GPUImageBrightnessFilter *brightnessFilter;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self brightness2];
}
- (void)brightness2{
UIImage *image = [UIImage imageNamed:@"placeholder"];
// 在GPUImageBrightnessFilter中首先初始化該濾鏡
GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
_brightnessFilter = brightnessFilter;
// 設置亮度調(diào)整范圍為整張圖像
[brightnessFilter forceProcessingAtSize:image.size];
[brightnessFilter useNextFrameForImageCapture];
// 獲取數(shù)據(jù)源
GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image smoothlyScaleOutput:YES];
_pic = pic;
// 創(chuàng)建最終預覽的view
GPUImageView *gpuView = [[GPUImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view insertSubview:gpuView atIndex:0];
// 設置GPUImage響應鏈背传,從數(shù)據(jù)源 => 濾鏡 => 最終界面效果
[pic addTarget:brightnessFilter]; // ① 添加上濾鏡
[brightnessFilter addTarget:gpuView]; // ② 添加效果界面
// 創(chuàng)建slider
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(25.0, [UIScreen mainScreen].bounds.size.height - 190, [UIScreen mainScreen].bounds.size.width - 50.0, 40.0)];
[slider addTarget:self action:@selector(updateSliderValue:) forControlEvents:UIControlEventValueChanged];
slider.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
slider.minimumValue = 0.0;
slider.maximumValue = 1.0;
slider.value = 0.0;
[gpuView addSubview:slider];
// 設置亮度值。
brightnessFilter.brightness = slider.value;
// 數(shù)據(jù)源處理圖像台夺,開始渲染
[pic processImage];
}
- (void)updateSliderValue:(UISlider *)sender
{
_brightnessFilter.brightness = sender.value;
// 數(shù)據(jù)源径玖,給我重新處理下圖片
[_pic processImage];
}
}
這兩個方案的區(qū)別在于,想利用slider來動態(tài)調(diào)節(jié)圖片亮度颤介,那么這里就必須用到GPUImageView來預覽最終的效果了梳星,不能直接用UIImageView。
參考資料:
http://blog.csdn.net/sinat_30162391/article/details/51085651
http://www.cnblogs.com/salam/p/5118704.html
http://www.cnblogs.com/qianyindichang/p/4023717.html
http://www.reibang.com/p/4646894245ba