iOS中滤镜的使用(三)OpenGLES渲染
来源:互联网 发布:存在与时间 知乎 编辑:程序博客网 时间:2024/05/22 20:35
iOS中滤镜的使用(三)
OpenGLES渲染
首先,Open Graphics Library(OpenGL)用于二维和三维的可视化。而OpenGL for Embedded Systems(OpenGL ES)是OpenGL的一个简化版本,消除冗余的功能并提供一个库,非常容易学习,在移动装置上应用实践容易。
它直接运行的图形处理硬件上,也就是GPU,并不运行在CPU上,因此,对CPU的消耗非常的小,并不影响程序的运行速度。如果是罗列出各种滤镜,反而吃cpu,让程序运行速度慢。
其次,OpenGLES是基于C语言编写的,与平台无关的应用程序接口。
因此,进行大量渲染的时候,通常使用OpenGLES
下面是一个例子:
#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
0 0
- iOS中滤镜的使用(三)OpenGLES渲染
- iOS中滤镜的使用(一) 马赛克滤镜
- iOS中滤镜的使用(二)滤镜组合
- opengles的渲染管线
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(三)
- OpenGLES Android篇零基础系列(三):OpenGL ES的渲染管道及VertexShader与FragmentShader
- android opengles 中glMultMatrixf的使用
- 使用OpenGLES 在 android 上显示摄像头滤镜效果
- iOS CoreImage图片处理动态渲染(滤镜)
- Air For IOS 滤镜的使用
- iOS中图片的渲染
- iOS使用滤镜
- iOS有关图片处理的总结 (三)------图片的滤镜
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(一)
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(二)
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(四)
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(五)
- OpenGLES的简单应用绘图,以及照相机画面变色变形渲染(六)
- Ubuntu找不到libudev.so.0库
- ffmpeg解码+opencv显示
- MyBatis多数据源配置(读写分离)
- LintCode复制带随机指针的链表
- Yii2学习笔记(四):关于params['breadcrumbs'][]
- iOS中滤镜的使用(三)OpenGLES渲染
- 日子--倪萍--穿插日子字里行间的话(书里每句话都有血有泪,摘出来黯淡了许多)
- VMX学习-VM entries
- Android布局大全
- Cadence ORCAD CAPTURE元件库介绍
- ios中关于检测应用安装和流量信息研究
- 虚幻4 自动测试代码的写法
- 计算字符串相似度算法——Levenshtein
- MySQL安装和SQL语句入门