iOS中滤镜的使用(三)OpenGLES渲染

原创 2015年07月09日 12:53:47

iOS中滤镜的使用(三)

OpenGLES渲染


首先,Open Graphics Library(OpenGL)用于二维和三维的可视化。而OpenGL for Embedded Systems(OpenGL ES)是OpenGL的一个简化版本,消除冗余的功能并提供一个库,非常容易学习,在移动装置上应用实践容易。
它直接运行的图形处理硬件上,也就是GPU,并不运行在CPU上,因此,对CPU的消耗非常的小,并不影响程序的运行速度。如果是罗列出各种滤镜,反而吃cpu,让程序运行速度慢。
OpenGL运行在GPU上

其次,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

基于OpenGL的滤镜架构搭建(IOS)

最近  为别的项目组写了一个基于openGL的实时滤镜架构,在此把遇到的问题和所得记录下。...
  • lantishua
  • lantishua
  • 2016年08月04日 16:40
  • 1544

ios 滤镜处理(详细滤镜介绍)及处理方法

小弟最近正在研究语音识别,,,,,如有大神赐教,,万分感激,,,目前没有办法对人物的感情 进行识别,,如有人做过音乐软件,,,类似唱吧的应用,,希望提供思路。。qq:2464294279 mai...
  • Xoxo_x
  • Xoxo_x
  • 2016年09月13日 10:48
  • 3009

第六章 层的滤镜

第六章 层的滤镜 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人...
  • mengtnt
  • mengtnt
  • 2012年02月28日 23:27
  • 11582

视频流的处理(实时美颜、滤镜)并通过简单的coreImage渲染

主要思路 :通过摄像头捕获画面,获取视频流之后,进行美颜处理,然后将处理后的流给coreImage进行渲染视频的捕获:框架 AVFoundation/AVFoundation.h 说明: AVC...
  • Xoxo_x
  • Xoxo_x
  • 2016年09月13日 10:13
  • 4753

Android用CameraApi实现相机开发以及用opengl es实现相机实时滤镜

对相机开发一直很感兴趣,最近研究了一下自定义相机以及实时滤镜的实现,写了个简单的demo,项目地址,有些地方写的比较粗糙,但大体功能基本都实现了。大体分为三块。1 利用CameraApi实现自定义相机...
  • aasoga
  • aasoga
  • 2017年06月07日 14:26
  • 1994

iOS之渲染到纹理

在这里记录一个在iOS上面渲染到纹理的一般步骤.文章最后附源码地址 首先,我们的视图的layer应该是CAEAGLLayer: +(Class)layerClass{ return [CA...
  • enghou123
  • enghou123
  • 2017年05月04日 09:55
  • 559

iOS--OpenGL渲染

OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。 OpenGL可以直接把RGB/RGBA的数据直接写入纹理中,利用纹理...
  • T20091
  • T20091
  • 2015年03月19日 22:44
  • 1882

iOS OpenGL基础

OpenGL ES 是可以在iphone上实现2D和3D图形编程的低级API。   如果你之前接触过 cocos2d,sparrow,corona,unity 这些框架,你会发现其实它们都是基于Ope...
  • CDUT100
  • CDUT100
  • 2015年05月16日 00:47
  • 1735

openGL ES进阶教程(六)美颜滤镜之美白,磨皮,红润

网上搜罗了一堆的美颜滤镜效果,可惜尽不如人意。最后偶然看到ios上提供了一个用OC写的美颜滤镜,好吧,改写成Java的试试。好在大学时期搞过一段时间IOS开发,用自己的半吊子的水平,没想到还真改成功了...
  • King1425
  • King1425
  • 2017年09月01日 20:17
  • 2141

使用OpenGLES 在 android 上显示摄像头滤镜效果

这是一份 使用opengles 绘制摄像头数据的代码,并使用滤镜处理了摄像头的效果,使用GPU绘制,减少cpu的占用...
  • chylove5
  • chylove5
  • 2015年11月04日 14:26
  • 4552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS中滤镜的使用(三)OpenGLES渲染
举报原因:
原因补充:

(最多只允许输入30个字)