本文主要是介绍iOS CoreImage专题(三)—— 自定义滤镜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 前言
- 子类化CIFilter自定义滤镜配方
- 子类化CIFilter创建CIColorInvert滤镜
- 色度键滤镜配方
- 创建立体映射
- 获得最佳性能
- 最佳性能实践
- 你的App需要颜色管理吗
- 总结
前言
本章节是这个专题最后一篇文章,学完这里,你应该能非常熟练的掌握CoreImage的使用技巧了。
在上一章节中我们介绍了如何实现一些高级技巧,包括滤镜链的实现、转场效果、人脸检测等。
这一章节我们将介绍如何通过子类化一个CIFilter实例来封装自定义的滤镜效果。
子类化CIFilter:自定义滤镜配方
你可以将一个滤镜的输出图像作为另一个滤镜的输入图像来创建各种自定义效果,你想链接多少个滤镜都可以。当你这样创建一种效果后,如果你想多次使用这种效果,就可以考虑子类化一个CIFilter来把这种效果封装成一个滤镜。
接下来我们将展示CoreImage如何通过子类化CIFilter来创建CIColorInvert滤镜,它还描述了将多个滤镜链起来的配方以获取这个有趣的效果。跟着我们的代码来进行操作,你应该能够将这个例子进行扩展,以创建自己的各种好玩的内建滤镜组合。
子类化CIFilter创建CIColorInvert滤镜
当你子类化一个CIFilter的时候你可以修改已存在的滤镜,通过代码设置它们的预设值或者将它们建成一个滤镜链。CoreImage也通过这样做来实现了一些内置滤镜。
要子类化一个滤镜你需要进行下面的操作:
- 用属性来声明滤镜的输入参数,并且这些属性的名字必须以input作为开头,比如inputImage。
- 如果有必要的话重写setDefaults方法。在iOS中,一个CIFilter被创建出来后,setDefaults方法会自动被调用,所以可以在里面设置一些默认值。
- 重写outputImage方法。
由CoreImage提供的CIColorInvert滤镜是由CIColorMatrix滤镜变异而来。就像它的名字描述的那样,CIColorInvert滤镜将一些向量提供给CIColorMatrix以让输入图像实现反色。跟着接下来的代码做并学习,你就可以封装自己的滤镜了。
在头文件中按照我们的实现步骤,需要提供一个用来接收输入参数的属性。
因为CoreImage已经自带了CIColorInvert类,所以我们这个例子中的类换了个名字。
@interface CIColorInvertFilter : CIFilter@property (retain, nonatomic) CIImage *inputImage;@end
在.m文件中,因为我们不需要设置默认值,所以没必要重写setDefaults方法。
@implementation CIColorInvertFilter- (CIImage *) outputImage
{CIFilter *filter = [CIFilter filterWithName:@"CIColorMatrix" keysAndValues:kCIInputImageKey, _inputImage,@"inputRVector", [CIVector vectorWithX: -1 Y:0 Z:0],@"inputGVector", [CIVector vectorWithX:0 Y:-1 Z:
这篇关于iOS CoreImage专题(三)—— 自定义滤镜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!