CoreImage学习笔记

本文深入探讨了CoreImage在iOS中的图像处理,包括CIFilter、CIImage和CIContext的使用,以及如何进行GPU加速和实时渲染。通过实例代码展示了如何创建和应用滤镜,讨论了线程安全、滤镜链、人脸识别和自动增强功能。此外,还提到了如何查询系统滤镜、自定义滤镜和脸部识别的应用。最后,分享了优化CoreImage性能的技巧。
摘要由CSDN通过智能技术生成

See also

Core Image Referece Collection

Core Image Fileter Referece

Core Image Kernel Language Reference


1、图像处理

Core Image有三个类处理图片

a、 CIFilter:可变的用来描述一个结果,一个滤镜对象至少一个输入参数和一个输出图片

b、 CIImage:一个用来描述一张图片的不可变对象,可以分析一个来自文件或者CIFilter输出对象的数据

c、 CIContext:用来给Core Image画滤镜对象产生的结果的一个对象,一个CI上下文对象能基于cpu或gpu


总之,通过上面这三个类处理图片是本章的主要内容



2、总揽

如需使用Core Image需在项目工程里面添加CoreImage.framework(QuartzCore.framework on OS X)并且在资源文件中引入头文件(<CoreImage/CoreImage.h> iOS  or <QuartzCore/CoreImage.h> on OS X)


例子代码:


CIContext *context = [CIContent contextWithOptions:nil];//创建一个CIContext对象

CIImage *image = [CIImage imageWithContentsOfURL:myURL];//创建一个CIImage对象

CIFilter *filter = [CIFilter filterWithName:@“CISepiaTone”];//创建一个CIFilter对象

[filter setValue:image forKey:kCIInputImageKey];

[filter setValue:@0.8 forKey:kCIInputIntensityKey];

CIImage *result = [filter valueForKey:kCIOutputImageKey];//获得输出图片

CGRect extent = [result extent];

CGImageRef cgImage = [context createCGImage:result fromRect:extent];//渲染这个CIImage到Core Graphics图片用来展示或者保存


有一些Core Image filter产生的图片是无限大的,例如这个CICategoryTileEffect 类别,渲染前,这个无限大的图片必须被剪裁(CICrop filter)或者必须指定一个有限矩形来渲染这个图片



3、CIContext

a、contextWithOption:

此方法将由cpu还是gpu渲染取决于option后字典参数kCIContextUseSoftwareRenderer,如果为@YES则由gpu渲染,速度比cpu渲染更快,等要显示的时候再转换成其他图片类型,如UIImage并拷贝到cpu内存。


b、 contextWithEAGLContext: options:

当需要实时展示的时候建议用此方法,该方法比起a方法的优势在于渲染图片一直在gpu并且从来不会拷贝到cpu内存,不过首先得创建一个EAGL上下文:

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];


使用此方法时最好将颜色管理器关闭,也就是将color space置为null,因为颜色管理将降低性能,一般实时显示app需要将此关闭,这并不会对我们程序造成很大的影响


NSDictionary *options = @{ kCIContextWorkingColorSpace : [NSNull null]};

CIContext *myContext = [CIContext contextWithEAGLContext : myEAGLContext options :options];



4、CIImage

Core Image Filter处理Core Image对象,CIImage对象实际上是一个图像的食谱,CoreImage在没有渲染之前不会产生任何像素。

初始化方法:

imageWithContentsOfURL: (options:)

imageWithCGImage: (options:)

imageWithBitmapata: bytesPerRow: size: format: colorSpace:

imageWithImageProvider: size: format: colorSpace: op

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值