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

2024-09-03 04:38

本文主要是介绍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专题(三)—— 自定义滤镜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132047

相关文章

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业