Изменение яркости GPUImage с помощью UISlider

Как изменить яркость изображения с помощью ползунка с помощью 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;

}

person BigAppleBump    schedule 20.06.2013    source источник


Ответы (2)


Есть несколько проблем с приведенным выше кодом.

Во-первых, вы на самом деле не используете фильтр яркости для своего изображения, потому что вы вызываете -imageByFilteringImage: для selectedFilter, который является общим GPUImageFilter, который вы выделили заново. Ваш GPUImageBrightnessFilter settingsFilter никогда не используется.

Во-вторых, вы не хотите выделять новый фильтр каждый раз, когда обновляете параметр. Выделите свой GPUImageBrightnessFilter один раз и просто обновляйте его по мере изменения значений.

В-третьих, вы не хотите повторно фильтровать UIImages. Переход к UIImages и обратно - медленный процесс (и не будет работать должным образом при использовании -imageByFilteringImage: в одном и том же фильтре из-за некоторого кэширования, которое я делаю). Вместо этого создайте GPUImagePicture на основе исходного изображения, добавьте к нему фильтр GPUImageBrightnessFilter в качестве цели и нацельте свой фильтр GPUImageBrightnessFilter на объект GPUImageView. Используйте -processImage каждый раз, когда вы обновляете свой фильтр яркости, и ваши обновления будут намного, намного быстрее. Когда вам нужно извлечь окончательное изображение, используйте -imageFromCurrentlyProcessedOutput.

person Brad Larson    schedule 20.06.2013
comment
Большое Вам спасибо. Ждал твоего ответа с самого утра. Спасибо за руководство. Я восстановил код с вашей инструкцией, и он отлично работает. Но это кажется немного медленным. Я не мог узнать причину. Вот мой код. GPUImagePicture *fx_image = [[GPUImagePicture alloc] initWithImage:originalImage]; [brightnesFilter setBrightness:self.slider.value]; [fx_image addTarget:brightnesFilter]; [fx_image изображение процесса]; UIImage *final_image = [brightnesFilter imageFromCurrentlyProcessedOutput]; self.selectedImageView.image = final_image; } - person BigAppleBump; 20.06.2013

это может тебе помочь...

-(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;  
}
person krushnsinh    schedule 01.04.2015