GPUImage组filter

我试图在iPhoto应用程序中看到的单个视图中实现亮度,对比度和曝光滤镜。 我试图建立组filter来做同样的事情。 但它显示白色屏幕而不是修改图片。 这是我申请的代码。

GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init]; GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc]init]; [brightnessFilter setBrightness:brightnessValue]; GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc]init]; [contrastFilter setContrast:contrastValue]; GPUImageExposureFilter *exposureFilter =[[GPUImageExposureFilter alloc]init]; [exposureFilter setExposure:exposureValue]; [groupFilter addFilter:brightnessFilter]; [groupFilter addFilter:contrastFilter]; [groupFilter addFilter:exposureFilter]; GPUImagePicture *stillImage= [[GPUImagePicture alloc]initWithImage:self.imageToModify]; [stillImage addTarget:groupFilter]; [stillImage processImage]; previewPicture.image = [groupFilter imageFromCurrentlyProcessedOutputWithOrientation:self.imageToModify.imageOrientation]; 

我甚至尝试将每个单独放置但仍然显示白色图像。 以上代码我使用正确吗? 我也尝试使用GPUImageFilterPipeline而不是GPUImageFilterGroup但仍然有同样的问题。 对于记录,图像是静止图像而不是实时馈送。

你错过了一些代码声明,如下所示。

  [brightnessFilter addTarget: contrastFilter]; [contrastFilter addTarget: exposureFilter]; [(GPUImageFilterGroup *) groupFilter setInitialFilters:[NSArray arrayWithObject: brightnessFilter]]; [(GPUImageFilterGroup *) groupFilter setTerminalFilter:exposureFilter]; 

谢谢

以下是将亮度,对比度和饱和度应用于video的完整代码

我从 这个链接 获得参考代码 ,我做了改变..

** 在此代码中我们使用GPUImage框架

1)。 在.h文件中

 #import "GPUImage.h" @interface ViewController : UIViewController { GPUImageMovie *movieFile; GPUImageMovieWriter *movieWriter; GPUImageUIElement *uiElementInput; } 

2)。 在.m文件中

 - (void)editVideo { NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"Sample Video" withExtension:@"m4v"]; movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; movieFile.runBenchmark = YES; movieFile.playAtActualSpeed = YES; GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init]; //1 GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init]; //2 GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init]; //3 GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init]; //4 [(GPUImageBrightnessFilter*)brightnessFilter setBrightness:0.10]; // change value between -1.00 to 1.00 [(GPUImageContrastFilter*)contrastFilter setContrast:1.48]; // change value between 0.00 to 4.00 [(GPUImageSaturationFilter*)saturationFilter setSaturation:2.00]; //change value between 0.00 to 2.00 GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init]; //5 blendFilter.mix = 0.0; /* ************************************************** */ UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-20)]; contentView.backgroundColor = [UIColor clearColor]; uiElementInput = [[GPUImageUIElement alloc] initWithView:contentView]; [brightnessFilter addTarget:contrastFilter]; [contrastFilter addTarget:saturationFilter]; [saturationFilter addTarget:blendFilter]; [uiElementInput addTarget:blendFilter]; [(GPUImageFilterGroup *) groupFilter setInitialFilters:[NSArray arrayWithObject: brightnessFilter]]; [(GPUImageFilterGroup *) groupFilter setTerminalFilter:blendFilter]; [movieFile addTarget:brightnessFilter]; [movieFile addTarget:contrastFilter]; [movieFile addTarget:saturationFilter]; // Only rotate the video for display, leave orientation the same for recording GPUImageView *filterView = (GPUImageView *)vwVideo; [brightnessFilter addTarget:filterView]; [contrastFilter addTarget:filterView]; [saturationFilter addTarget:filterView]; [blendFilter addTarget:filterView]; [brightnessFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){ if (frameTime.value/frameTime.timescale == 2) { [contentView viewWithTag:1].hidden = NO; } [uiElementInput update]; }]; [contrastFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){ if (frameTime.value/frameTime.timescale == 2) { [contentView viewWithTag:1].hidden = NO; } [uiElementInput update]; }]; [saturationFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){ if (frameTime.value/frameTime.timescale == 2) { [contentView viewWithTag:1].hidden = NO; } [uiElementInput update]; }]; //In addition to displaying to the screen, write out a processed version of the movie to disk NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:[NSURL fileURLWithPath:pathToMovie] size:CGSizeMake(640.0, 480.0)]; [brightnessFilter addTarget:movieWriter]; [contrastFilter addTarget:movieWriter]; [blendFilter addTarget:movieWriter]; // Configure this for video from the movie file, where we want to preserve all video frames and audio samples movieWriter.shouldPassthroughAudio = YES; movieFile.audioEncodingTarget = movieWriter; [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter]; [movieWriter startRecording]; [movieFile startProcessing]; [movieWriter setCompletionBlock:^{ UISaveVideoAtPathToSavedPhotosAlbum(pathToMovie, nil, nil, nil); }]; } 

*注意: – 请在设备中运行该演示示例而不是在模拟器中以获得完美结果。

完成处理后,您将在设备中获得有效video,并且为了获得不同的效果,您可以更改setBrightness,setContrast和setSaturation的值(参见代码)