强大的Core Image框架,各种滤镜处理图像
首先介绍一下Core Image,他是一个很强大的图像处理框架,他可以让你简单的应用各种滤镜来处理图像,比如说色相,饱和度,亮度等等。。。他是运用GPU(CPU)实时地处理图像数据和视频的帧。而且Core Image滤镜可以叠加在一起,产生多滤镜的效果。因为没有滤镜都有属于自己唯一的参数,可以通过修改这些参数来达到预期效果。
在应用Core Image时,要注意着三个比较总要的类:CIContext ,CIImage ,CIFilter.
1.CIContext:所有的图像处理都在一个CIContext中完成,相当于OpenGL中的上下文;
2.CIImage:用来保存图像数据。同时他可以通过像素数据构造出来;
//创建CIImage对象
UIImage *image = [UIImage imageNamed:@"test.png"];
NSData *data = UIImagePNGRepresentation(image);
self.ciImage = [CIImage imageWithData:data];
3.CIFiter:包含了一个字典结构的滤镜类,同时滤镜有很多中。各种滤镜都定义了他们独自不同的属性。他的种类有很多,可以参考http://blog.sina.com.cn/s/blog_5fb39f9101018g34.html
//打印所有的滤镜类型
NSArray *cifilter = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
NSLog(@"滤镜名称:\n%@\n滤镜数:%ld", cifilter,cifilter.count);
废话不多说,直接上代码
//创建CIImage对象
UIImage *image = [UIImage imageNamed:@"girl.png"];
NSData *data = UIImagePNGRepresentation(image);
self.ciImage = [CIImage imageWithData:data];
// 创建基于CPU的CIContext对象
self.context = [CIContext contextWithOptions:nil];
// 创建过滤器
//调节色相
self.colourFilter = [CIFilter filterWithName:@"CIHueAdjust"];
[self.colourFilter setDefaults];
// 设置过滤器参数,来改变图像数据
在设置过滤器的参数时,你要明确当前过滤器的属性,可以通过打印出相应过滤器的字典数据查看并进一步更改:
NSLog(@"CIHueAdjust______%@",[self.colourFilter attributes]);
/**
inputAngle = {
CIAttributeClass = NSNumber;
CIAttributeDefault = 0;
CIAttributeDescription = "An angle (in radians) to use to correct the hue of an image.";
CIAttributeDisplayName = Angle;
CIAttributeIdentity = 0;
CIAttributeSliderMax = "3.141592653589793";
CIAttributeSliderMin = "-3.141592653589793";
CIAttributeType = CIAttributeTypeAngle;
};
inputImage = {
CIAttributeClass = CIImage;
CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
CIAttributeDisplayName = Image;
CIAttributeType = CIAttributeTypeImage;
};
*/
//可以看到inputAngle输入角度的取值范围"-3.141592653589793-3.141592653589793"
[_colourFilter setValue:_ciImage forKey:@"inputImage"];
[_colourFilter setValue:[NSNumber numberWithFloat:2] forKey:@"inputAngle"];
// 得到过滤后的图片
CIImage *outputImage = [_colourFilter outputImage];
// 转换图片
CGImageRef cgimg = [_context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
// 显示图片
[_imageView setImage:newImg];
CGImageRelease(cgimg);
具体demo链接https://github.com/White007/CIFilterDemo.git
强大的Core Image框架,各种滤镜处理图像的更多相关文章
- Core Graphics框架
在iOS中常用的框架是Quartz 2D,它是Core Graphics框架的一部分,是一个强大的二维图像绘制引擎.我们日常开发所用到的UIKit的组件都是由Core Graphics框架进行绘制的. ...
- iOS绘图UIBezierPath 和 Core Graphics框架
前言 iOS系统本身提供了两套绘图的框架,即UIBezierPath 和 Core Graphics.而前者所属UIKit,其实是对Core Graphics框架关于path的进一步封装,所以使用起来 ...
- 强大的Core Image(教你做自己的美图秀秀))
iOS5新特性:强大的Core Image(教你做自己的美图秀秀)) iOS5给我们带来了很多很好很强大的功能和API.Core Image就是其中之一,它使我们很容易就能处理图片的各种效 ...
- ASP.NET Core 6框架揭秘实例演示[01]: 编程初体验
作为<ASP.NET Core 3框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>提供了很多新的章节,同时对现有的内容进行大量的修改.虽然本书旨在对ASP.NET ...
- ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希
数据保护(Data Protection)框架旨在解决数据在传输与持久化存储过程中的一致性(Integrity)和机密性(confidentiality)问题,前者用于检验接收到的数据是否经过篡改,后 ...
- Core Foundation框架
转载自:http://blog.csdn.net/weiwangchao_/article/details/7744972 Core Foundation框架 (CoreFoundation.fram ...
- IOS之Core Foundation框架和Cocoa Foundation框架的区别
Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举该框架支持进行管理的数据以及可提供的 ...
- iPhone的定位技术与Core Location框架
来源:http://www.cnblogs.com/lovecode/archive/2011/12/24/2300579.html iPhone定位来源通常有:1. GPS定位 2. WiFi定位 ...
- 【转】Core Bluetooth框架之一:Central与Peripheral
原文网址:http://southpeak.github.io/blog/2014/07/29/core-bluetoothkuang-jia-zhi-%5B%3F%5D-:centralyu-per ...
随机推荐
- 2.5.3 使用alertDialog创建自定义对话框
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- SQL也能玩递归
最近在做项目的时候遇到一个表,将省市区都放到一个表里存储,通过父ID字段来表示省市区的关系. 创建表语句 CREATE TABLE [dbo].[Table_6]( [id1] [int] NOT N ...
- EntityFramework 异常 -- An entity object cannot be referenced by multiple instances of IEntityChangeTracker
问题 在调用 DbSet 的 Attach() 方法时(与将 Entity 设置为 EntityState.Unchanged 状态等价)报告以下错误: An entity ob ...
- 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- Delphi 编写的Web Service
一编写服务程序 第一步:File----->New----->Other------>WebServices----->Soap Server Application选择I ...
- Supervisord管理
原文地址:http://blog.csdn.net/fyh2003/article/details/6837970 学习笔记 Supervisord可以通过sudo easy_install supe ...
- 从物理执行的角度透视spark Job
本博文主要内容: 1.再次思考pipeline 2.窄依赖物理执行内幕 3.宽依赖物理执行内幕 4.Job提交流程 一:再次思考pipeline 即使采用pipeline的方式,函数f对依赖的RDD中 ...
- 400. Nth Digit
这个EASY难度的题怎么感觉比H的还难,昨天没做出来,今天才做出来.. 呃啊..我生 气 啦.. 直接看的答案,耻辱. 1 digit: 1~9 总共1×9个 2 digits: 10~99 总共2× ...
- DEDECMS5.7 首页和栏目页调用文章按权重排序
dedecms 5.7版本已增加按权重排序功能: [arclist]标签增加按权重排序,在后台管理DEDE里找到以下目录\include\taglib中的arclist.lib.php文件并打开 大约 ...
- Hibernate自定义数据库查询(排序、输出条数)
Hibernate数据库操作类(eg:TexDAO.java) /* * queryString HQL语句,first开始条数, max输出条数 ,norder排序 * 例: List lis = ...