iOS GPUImage之GPUImageFilterGroup组合滤镜(5)
2016-07-02 00:08
1121 查看
【提醒】 添加滤镜的顺序不同,效果也不同!
》》运行
![](https://img-blog.csdn.net/20160702111643209)
》》运行
![](https://img-blog.csdn.net/20160702144842897)
参考文章
https://github.com/BradLarson/GPUImage/issues/112
示例:使用GPUImageFilterGroup为GPUImagePicture添加组合滤镜 代码: // // ViewController.m // GPUImageTest // // Created by 黄健 on 16/7/1. // Copyright © 2016年 黄健. All rights reserved. // #import "ViewController.h" #import "GPUImage.h" @interface ViewController () { UIImage *_inputImage; UIImage *_outputImage; } @property (weak, nonatomic) IBOutlet UIImageView *iconImageView; @property (nonatomic,strong) GPUImagePicture *picture; @property (nonatomic,strong) GPUImageView *imageView; @property (nonatomic,strong) GPUImageFilterGroup *filterGroup; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 图片输入源 _inputImage = [UIImage imageNamed:@"icon"]; // 初始化 picture _picture = [[GPUImagePicture alloc] initWithImage:_inputImage smoothlyScaleOutput:YES]; // 初始化 imageView _imageView = [[GPUImageView alloc] initWithFrame:self.iconImageView.bounds]; [self.iconImageView addSubview:_imageView]; // 初始化 filterGroup _filterGroup = [[GPUImageFilterGroup alloc] init]; [_picture addTarget:_filterGroup]; // 添加 filter /** 原理: 1. filterGroup(addFilter) 滤镜组添加每个滤镜 2. 按添加顺序(可自行调整)前一个filter(addTarget) 添加后一个filter 3. filterGroup.initialFilters = @[第一个filter]]; 4. filterGroup.terminalFilter = 最后一个filter; */ GPUImageRGBFilter *filter1 = [[GPUImageRGBFilter alloc] init]; GPUImageToonFilter *filter2 = [[GPUImageToonFilter alloc] init]; GPUImageColorInvertFilter *filter3 = [[GPUImageColorInvertFilter alloc] init]; GPUImageSepiaFilter *filter4 = [[GPUImageSepiaFilter alloc] init]; [self addGPUImageFilter:filter1]; [self addGPUImageFilter:filter2]; [self addGPUImageFilter:filter3]; [self addGPUImageFilter:filter4]; // 处理图片 [_picture processImage]; [_filterGroup useNextFrameForImageCapture]; self.iconImageView.image = [_filterGroup imageFromCurrentFramebuffer]; } - (void)addGPUImageFilter:(GPUImageOutput<GPUImageInput> *)filter { [_filterGroup addFilter:filter]; GPUImageOutput<GPUImageInput> *newTerminalFilter = filter; NSInteger count = _filterGroup.filterCount; if (count == 1) { _filterGroup.initialFilters = @[newTerminalFilter]; _filterGroup.terminalFilter = newTerminalFilter; } else { GPUImageOutput<GPUImageInput> *terminalFilter = _filterGroup.terminalFilter; NSArray *initialFilters = _filterGroup.initialFilters; [terminalFilter addTarget:newTerminalFilter]; _filterGroup.initialFilters = @[initialFilters[0]]; _filterGroup.terminalFilter = newTerminalFilter; } } @end
》》运行
示例:使用GPUImageFilterGroup为GPUImageVideoCamera添加四种组合滤镜 // // ViewController.m // GPUImageTest // // Created by 黄健 on 16/7/1. // Copyright © 2016年 黄健. All rights reserved. // #import "ViewController.h" #import "GPUImage.h" @interface ViewController () @property (nonatomic,strong) GPUImageVideoCamera *videoCamera; @property (nonatomic,strong) GPUImageView *filterImageView; @property (nonatomic,strong) GPUImageFilterGroup *filterGroup; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 初始化 videoCamera _videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionBack]; _videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; _videoCamera.horizontallyMirrorFrontFacingCamera = NO; _videoCamera.horizontallyMirrorRearFacingCamera = NO; // 初始化 filterGroup _filterGroup = [[GPUImageFilterGroup alloc] init]; [_videoCamera addTarget:_filterGroup]; // 添加 filter /** 原理: 1. filterGroup(addFilter) 滤镜组添加每个滤镜 2. 按添加顺序(可自行调整)前一个filter(addTarget) 添加后一个filter 3. filterGroup.initialFilters = @[第一个filter]]; 4. filterGroup.terminalFilter = 最后一个filter; */ GPUImageRGBFilter *filter1 = [[GPUImageRGBFilter alloc] init]; GPUImageToonFilter *filter2 = [[GPUImageToonFilter alloc] init]; GPUImageSepiaFilter *filter3 = [[GPUImageSepiaFilter alloc] init]; GPUImageColorInvertFilter *filter4 = [[GPUImageColorInvertFilter alloc] init]; [self addGPUImageFilter:filter1]; [self addGPUImageFilter:filter2]; [self addGPUImageFilter:filter3]; [self addGPUImageFilter:filter4]; // 初始化 imageView _filterImageView = [[GPUImageView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:_filterImageView]; [_filterGroup addTarget:_filterImageView]; [_videoCamera startCameraCapture]; } - (void)addGPUImageFilter:(GPUImageOutput<GPUImageInput> *)filter { [_filterGroup addFilter:filter]; GPUImageOutput<GPUImageInput> *newTerminalFilter = filter; NSInteger count = _filterGroup.filterCount; if (count == 1) { _filterGroup.initialFilters = @[newTerminalFilter]; _filterGroup.terminalFilter = newTerminalFilter; } else { GPUImageOutput<GPUImageInput> *terminalFilter = _filterGroup.terminalFilter; NSArray *initialFilters = _filterGroup.initialFilters; [terminalFilter addTarget:newTerminalFilter]; _filterGroup.initialFilters = @[initialFilters[0]]; _filterGroup.terminalFilter = newTerminalFilter; } } @end
》》运行
参考文章
https://github.com/BradLarson/GPUImage/issues/112
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法