本 session 不慎看了 N 遍,然而并没有什么卵用,理解的并不多,于是乎简单整理一些概念。看的我是大写的懵逼 ==
地址 Developing Core Image Filters for iOS
参考示例地址 QingSession

然而似乎是看 session 的顺序有误?== 试着总结一些

在使用 Core Image 中,我们主要会用到下面四个 Class :

  • CIKernel 处理的规则写在这里!
  • CIFilter 用来接收输入输出 CIImage
  • CIImage
  • CIContext

Session 最开始讲解了一下基本的概念,就是理解通过 inputBufferoutputBuffer 一个一个 point 处理就好。

直接贴出 Workflow 比较好:

Using Core Image on iOS

  1. Create input CIImages
  2. Subclass CIFilter
    1. Create kernel
    2. Apply kernel to input image(s) and pass parameters from filter
  3. Get output CIImage
  4. Use CIContext to render output image (to CGImageRef, EAGL context, etc.)

在 OS X 和 iOS 上,都有 CIKernel ,然后 iOS 上特有 CIColorKernel 以及 CIWarpKernel 。应该是性能不足才有的这两个 Kernel 。

差点忘了一点,Session 的代码都是 Objective-C ,需要注意的一点是那些 Factory 方法在 Swift 中都是初始化方法。

CIColorKernel

这个 Kernel 是用来单独处理颜色的。主要是改变 vec4 ,这里有四个变量吧,rgba 。就不解释这是什么鬼了,看一眼就能知道。

这里已经实现了一些效果 Vignette 之类的。

CIWarpKernel

这个主要是用来处理。。直接理解成 xy 吧。

其实如果需要各种效果直接从这里拿就好了,我想一般的处理这里不会找不到,找不到就自己写咯:
Core Image Filter Reference
如果坚持自己写,注意一点:使用 samplerTransform 配合 sample 做变换,具体见 Session 。

DOD & ROI

可能这个 DOD 和 ROI 需要解释一下:

  • DOD : domain of definition ,就是指处理的范围
  • ROI : region of interest ,允许我们在处理单个 point 时获取整个 rect

实际使用 Tips

  • 处理图片可能是一个很耗时间的问题,强烈建议异步处理这个问题,然后把 RxSwift 对异步 & 线程切换可以非常灵活,安利完毕。
  • 还有就是图片的处理可能是多部的,比如加滤镜然后转一下图片,所以如果写轮子完成这个需求会很有意思。建议参考一下 Chris 的 Functional Swift

参考阅读