首先介绍一下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

最新文章

  1. 深入理解css BFC 模型
  2. html自我设计login登录
  3. asp.net mvc多条件+分页查询解决方案
  4. nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
  5. BZOJ2725 : [Violet 6]故乡的梦
  6. javascript的变量,传值和传址,参数之间关系
  7. notifyDataSetChanged listview内容没更新的问题
  8. Qss All
  9. 『安全工具』Nmap 强悍的端口扫描工具
  10. java下properties属性文件操作
  11. BZOJ2300: [HAOI2011]防线修建
  12. .Net Excel 导出图表Demo(柱状图,多标签页)
  13. Flask框架基础--第一篇
  14. Go linux 实践3
  15. 使用visual studio把xsd文件转成xml格式文件
  16. Druid连接池(四)
  17. C# DataTable Compute方法的使用
  18. C# winfrom提示框,点击则不显示,不点击则提示输入内容
  19. 20145310 《Java程序设计》第10周学习总结
  20. Tomcat 没有自动解压webapp下的war项目文件问题

热门文章

  1. bzoj2597
  2. AD域设置
  3. netstat 命令state值
  4. Eclipse添加快速查找Dao中方法所对应的Mybatis XML映射SQL的插件
  5. HDOJ/HDU 2539 点球大战(String.endsWith()方法的一个应用~)
  6. NGUI-学习笔记(2)一个项目需求
  7. 客户端MapReduce提交到YARN过程
  8. SharePoint 2013的100个新功能之网站管理(二)
  9. WebView Cache 缓存清除
  10. Struts2配置文件讲解