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的实时滤镜架构,在此把遇到的问题和所得记录下。...

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

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

OpenGL ES 版本与iOS版本的支持对应关系以及EAGL的来源分析

iOS版本 OpenGL ES版本 2.x 1.x 3.0~6.x 2.x 7.0 3.x OpenGL ES开发涉及到EGL和OpenGL两部分,后者平台独立,前者是与平台的交...
  • sleks
  • sleks
  • 2013年12月15日 06:46
  • 3008

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

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

GPU 加速下的图像处理 Opengl es shader

Instagram,Snapchat,Photoshop。 所有这些应用都是用来做图像处理的。图像处理可以简单到把一张照片转换为灰度图,也可以复杂到是分析一个视频,并在人群中找到某个特定的人。尽管这...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

openGL ES进阶教程(四)用openGL ES+MediaPlayer 渲染播放视频+滤镜效果

之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频 ,今天再给大家来一篇openGL ES+...

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

这是一份 使用opengles 绘制摄像头数据的代码,并使用滤镜处理了摄像头的效果,使用GPU绘制,减少cpu的占用...

IOS图像处理之 coreImage.

最近的项目中,要用到图像处理,查了很多资料,最后用一些网上比较山寨d
  • lvmaker
  • lvmaker
  • 2014年08月05日 15:24
  • 18178

关于iOS开发中图片处理的一些积累(CoreGraphic、CoreImage、GPUImage、OpenGL)

Core ImageCore Image 前言 Core Graphics CoreImage GPUImage前言貌似公司最近的项目都是和图片处理有关,拍拍项目中需要将图片处理成buffer传到图像...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS中滤镜的使用(三)OpenGLES渲染
举报原因:
原因补充:

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