IOS 中openGL使用(使用基准图快速制作滤镜)
Color Lookup Table
在影像处理领域中,当我们想要调整一个影像的色彩时,经常会用到 Color Lookup Table
的技术。
举个简单的例子,如果我们想要让影像中的每个像素的R值变为原本的0.3倍,最基本的做法就是把每一个像素的R值乘以0.3,假设像素的大小为1000X1000,那么总共要1000000次浮点运算。
如果我们一开始先创建一张表,把所有颜色值经过处理(R值变为0.3倍)之后的结果记录起来,然后把每个像素的色彩拿去查表,得到处理之后的色彩值,那么我们只要做1000000次查表操作,会比浮点运算快很多。实际上大部分色彩调整的算法都比这个例子复杂许多,因此更能凸显出查表法的高效率。
所以什么是 Color Lookup Table
呢,顾名思义,就是一张颜色映射表,也就是基准图
,用于查询一个像素需要映射的颜色值。不过如果要把所有色彩的处理结果都存起来,那这张表势必会相当大。以 RGB 24 bits 为例,每个像素占3 bytes,而总共会有16777216(256X256X256)种色彩,总共占48MB(256X256X256X3 bytes),看来并不小。因此实际上我们并不会记下所有的色彩,而是只记下部分的色彩,其他不在表内的色彩则用内插值取得处理后的结果。
当然了,由于基准图的特性,这种方式只能进行颜色上的调整(曲线,色彩平衡等),其他效果调整也只限于利用图层间混合模式的更改,例如可做暗角、漏光等效果。
接下来,我们一步步来看怎么制作一个自己的滤镜。
我们主要讲iOS的制作流程,android也是类似的。
一、在GPUImage框架中找到lookup.png
这张图,图的大小是512X512,也就是64X64X64。
二、打开Photoshop,选取一张原始图。
三、为这张图创建一个组,调一下颜色。
四、现在我们效果调好了,我们需要把效果应用到步骤一中的基准图,我们会得到一张新的基准图。
五、接下来就借用GPUImage框架中的GPUImageLookupFilter来实现我们的效果吧。
总结:从Demo最终的效果来看,与我们之前在Photoshop处理出来的效果几乎是一样的。
最后我们一起简单分析一下GPUImageLookupFilter中的脚本。
IOS 中openGL使用(使用基准图快速制作滤镜)的更多相关文章
- IOS 中openGL使用教程2(openGL ES 入门篇 | 绘制一个多边形)
在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> ...
- gif动图快速制作方法(附工具)
现在写博客或是wiki的过程中,会经常引用到图片,特别是客户端经常与页面相关所以截图不可避.但是越来越多的效果仅仅一张图片是无法清楚的描述.并且博客或是wiki也是支持gif图的.gif图的制作方法有 ...
- gif动图快速制作方法(附工具)(转)
现在写博客或是wiki的过程中,会经常引用到图片,特别是客户端经常与页面相关所以截图不可避.但是越来越多的效果仅仅一张图片是无法清楚的描述.并且博客或是wiki也是支持gif图的.gif图的制作方法有 ...
- IOS 中openGL使用教程3(openGL ES 入门篇 | 纹理贴图(texture)使用)
在这篇文章中,我们将学习如何在openGL中使用纹理贴图. penGL中纹理可以分为1D,2D和3D纹理,我们在绑定纹理对象的时候需要指定纹理的种类.由于本文将以一张图片为例,因此我们为我们的纹理对象 ...
- iOS 中OpenGL ES 优化 笔记 1
1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...
- IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)
OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...
- IOS 中openGL使用教程4(openGL ES 入门篇 | 离屏渲染)
通常情况下,我们使用openGL将渲染好的图片绘制到屏幕上,但有时候我们不想显示处理结果,这时候就需要使用离屏渲染了. 正常情况下,我们将屏幕,也就是一个CAEAGLLayer对象作为渲染目标,离屏渲 ...
- iOS 中使用.9图
背景 .9图来源于Android.为了设计出一套图,兼容Android和iOS,使用.9图的方式来对图片进行拉伸以适应不同的屏幕.在iOS中没有.9图的概念,只能先了解Android的.9图再进行模拟 ...
- 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移
解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...
随机推荐
- Sublime Text 3 安装 Emmet 插件
首先安装 Package Control 1.通过快捷键 ctrl+` 或者 View > Show Console 菜单打开控制台 2.粘贴以下代码后回车安装 import urllib.r ...
- [oracle]Oracle角色管理
假如我们直接给每一个用户赋予权限,这将是一个巨大又麻烦的工作,同时也不方便DBA进行管理.通过采用角色,使得: 权限管理更方便.将角色赋予多个用户,实现不同用户相同的授权.如果要修改这些用户的权限,只 ...
- 得到css style
//根据ID返回dom元素 2 var $ = function(id){return document.getElementById(id);} 3 //返回dom元素的当前某css值 4 var ...
- Java 之 web.xml(Java之负基础实战)
多个web.xml会同时生效,先加载tomcat下的web.xml,再加载网站目录下的web.xml. 1.tomcat自带的web.xml 在tomcat的conf目录下 2.自定义web.xml ...
- js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别
MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就 ...
- Raphael初始化,path,circle,rect,ellipse,image
path jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- WCF服务发布到IIS中去 在WCF调试
第一个WCF程序 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc ...
- XMLSocket的bug
"<cross-domain-policy>" "<site-control permitted-cross-domain-policies=\&quo ...
- mybatis springmvc调用oracle存储过程,返回记录集
参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...
- jquery.validate.js之自定义表单验证规则
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...