iOS中滤镜的使用(三)OpenGLES渲染
2015-07-09 12:53
507 查看
iOS中滤镜的使用(三)
OpenGLES渲染
首先,Open Graphics Library(OpenGL)用于二维和三维的可视化。而OpenGL for Embedded Systems(OpenGL ES)是OpenGL的一个简化版本,消除冗余的功能并提供一个库,非常容易学习,在移动装置上应用实践容易。它直接运行的图形处理硬件上,也就是GPU,并不运行在CPU上,因此,对CPU的消耗非常的小,并不影响程序的运行速度。如果是罗列出各种滤镜,反而吃cpu,让程序运行速度慢。
其次,OpenGLES是基于C语言编写的,与平台无关的应用程序接口。
因此,进行大量渲染的时候,通常使用OpenGLES
下面是一个例子:
[code]#import "ViewController.h" #import <GLKit/GLKit.h> @interface ViewController () @property (strong, nonatomic) GLKView *glkView;//渲染用的buffer视图 @property (strong, nonatomic) CIFilter *filter; @property (strong, nonatomic) CIImage *ciImage; @property (strong, nonatomic) CIContext *ciContext; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIImage *showImage = [UIImage imageNamed:@"IMG_0160"]; CGRect rect = CGRectMake(0, 0, 350, 400); // 获取OpenGLES上下文 EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; //创建出渲染的buffer _glkView = [[GLKView alloc] initWithFrame:rect context:eaglContext]; [_glkView bindDrawable];//绑定绘制 [self.view addSubview:_glkView]; //创建出CoreImage用的上下文 _ciContext = [CIContext contextWithEAGLContext:eaglContext options:@{kCIContextWorkingColorSpace:[NSNull null]}]; //CoreImage相关设置 _ciImage = [[CIImage alloc] initWithImage:showImage]; _filter = [CIFilter filterWithName:@"CISepiaTone"];// //棕黑色调 [_filter setValue:_ciImage forKey:kCIInputImageKey]; [_filter setValue:@(0) forKey:kCIInputIntensityKey]; //开始渲染 [_ciContext drawImage:[_filter outputImage] inRect:CGRectMake(0, 0, _glkView.drawableWidth, _glkView.drawableHeight) fromRect:[_ciImage extent]]; [_glkView display]; // [self filter]; //动态渲染 UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 450, 320, 20)]; slider.minimumValue = 0.f; slider.maximumValue = 1.f; [slider addTarget:self action:@selector(sliderEvent:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:slider]; } - (void)sliderEvent:(UISlider *)slider { _filter = [CIFilter filterWithName:@"CISepiaTone"];// //棕黑色调 [_filter setValue:_ciImage forKey:kCIInputImageKey]; [_filter setValue:@(slider.value) forKey:kCIInputIntensityKey]; //开始渲染 [_ciContext drawImage:[_filter outputImage] inRect:CGRectMake(0, 0, _glkView.drawableWidth, _glkView.drawableHeight) fromRect:[_ciImage extent]]; [_glkView display]; } @end
相关文章推荐
- iOS 后台播放
- IOS 时间格式 时间转换 大总结
- iOS 本地缓存实现
- iOS如何才能在招聘中表现得靠谱?
- IOS——duplicate symbol _OBJC_METACLASS_$_ClassName错误(stackoverflow)
- IOS loadView 和 viewDidLoad 的区别
- iOS ViewController生命周期
- iOS 自动登录,登录过程中一直显示加载页
- iOS开发 - CoreLocation地理定位
- [iOS]iOS发送短信
- iOS开发经验技巧之iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault)
- iOS开发经验技巧之stringByReplacingCharactersInRange: withString: 實現字符串删除,替换
- ios layout机制相关方法
- iOS中滤镜的使用(二)滤镜组合
- IOS正则表达式的简单介绍
- The identity used to sign the executable is no longer valid
- ios项目(十三)
- iOS 动态画圆圈
- iOS 开发中问题 ——tableView分行线距离左侧15像素空白的解决办法
- iOS GCD使用