CoreImage使用介绍

一、概述

CoreImage.framework从iOS5开始启用,它使我们很容易就能处理图片的各种效果,色彩,曝光,饱和度,变形等等。不仅功能强大,而且可以直接使用GPU,效率很高,甚至可以实时的对视频进行渲染。

二、使用步骤

1.首先需要导入CoreImage.framework框架;在Mac类库中它集成在了QuartzCore.framework框架。

2.有3个主要的类:
CIContext:它与Core Graphics和OpenGL context类似,所有Core Image的处理流程都通过它来进行;
CIImage:它用来存放图片数据,可以通过UIImage,图片文件或像素数据创建;
CIFilter:通过它来定义过滤器的详细属性。

3.CIContext有两种初始化方法,分别对应GPU和CPU
(1)创建基于GPU的CIContext对象:
   context = [CIContext contextWithOptions: nil];
(2)创建基于CPU的CIContext对象
   context = [CIContext contextWithOptions: [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
             forKey:kCIContextUseSoftwareRenderer]];
(3)一般采用第一种基于GPU的,因为效率要比CPU高很多,但是要注意的是基于GPU的CIContext对象无法跨应用访问。
比如你打开UIImagePickerController要选张照片进行美化,如果你直接在UIImagePickerControllerDelegate的委托方法里调用CIContext对象进行处理,那么系统会自动将其降为基于CPU的,速度会变慢,所以正确的方法应该是在委托方法里先把照片保存下来,回到主类里再来处理。

4.CIImage的初始化方法有很多,常用的也是2种:
(1)通过图片路径创建CIImage
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
   NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];
   beginImage = [CIImage imageWithContentsOfURL:fileNameAndPath];
(2)通过UIImage对象创建CIImage
   UIImage *gotImage = ...;
   beginImage = [CIImage imageWithCGImage:gotImage.CGImage];

5.CIFilter初始化:
   filter = [CIFilter filterWithName:@"CISepiaTone"];
   [filter setValue:beginImage forKey:kCIInputImageKey];
   [filter setValue:[NSNumber numberWithFloat:slideValue] forKey:@"inputIntensity"];
   第一行:指定使用哪一个过滤器,通过[CIFilter filterNamesInCategory: kCICategoryBuiltIn]能得到所有过滤器的列表
   第二行:指定需要处理的图片
   第三行:指定过滤参数,每个过滤器的参数都不一样,可以在官方文档里搜索“Core Image Filter Reference”查看

6.得到过滤后的图片并输出:
   CIImage *outputImage = [filter outputImage];
   CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
   UIImage *newImg = [UIImage imageWithCGImage:cgimg]; 
   [imgV setImage:newImg];
   CGImageRelease(cgimg);
   第一行:通过[filter outputImage]可以得到过滤器输出的图片
   第二行:通过CIContext的方法createCGImage: fromRect:得到CGImage
   第三行:转化为UIImage,这样我们就可以跟据需要显示在界面上了

7.至此一个过滤周期就完成了,简单来说分以下几个步骤:
(1)初始化CIContext,CIImage。
(2)初始化CIFilter并设置参数。
(3)得到输出的图片。
(4)将图片转化成能显示的UIImage类型。
如果想一张图片有多种过滤效果就需要重复2,3两步,并且要将上一个过滤器输出的图片作为下一个过滤器的参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值