iOS CoreImage专题(三)—— 自定义滤镜

本文是CoreImage专题的最后一部分,讲解如何通过子类化CIFilter创建自定义滤镜,如CIColorInvert和色度键滤镜。详细介绍了创建CIColorInvert滤镜的步骤,并探讨了色度键滤镜的实现,包括立体映射的创建。此外,文章还讨论了如何优化CoreImage的性能和颜色管理。最后,强调了在实际应用中灵活运用CoreImage来提升App的图像处理能力。
摘要由CSDN通过智能技术生成

前言

本章节是这个专题最后一篇文章,学完这里,你应该能非常熟练的掌握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:
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值