替换为iOS 12中的自定义CIFilter。

时间:2018-10-25 12:44:36

标签: ios swift ios12 cifilter

自iOS 12 CIColorKernel(source:“ kernel string”)被弃用以来。你们中有人知道苹果可以替代吗?

我正在Swift中搜索自定义CIFilter。也许有一个开源库?

3 个答案:

答案 0 :(得分:2)

在WWDC 2017上宣布,自定义滤镜也可以使用Metal Shading Language编写- https://developer.apple.com/documentation/coreimage/writing_custom_kernels

因此,现在看来他们已经完全摆脱了Core Image Kernel Language。

以下是使用Metal编写CIColorKernel的快速入门- https://medium.com/@shu223/core-image-filters-with-metal-71afd6377f4

使用Metal编写内核实际上更容易,唯一的麻烦是您需要在项目中指定2个编译器标志(请参见上面的文章)。

答案 1 :(得分:1)

我尝试跟着这些博客文章和Apple文档一起学习,但是CoreImage和Metal之间的这种集成非常令人困惑。经过大量搜索之后,我最终创建了一个实际的example iOS app工作,演示了如何编写Metal内核灰度函数并使其处理CoreImage管道。

答案 2 :(得分:0)

您可以像这样使用它:

 let url = Bundle.main.url(forResource: "default", withExtension: "metallib")!
 let data = try! Data(contentsOf: url)
 let kernel = try! CIKernel(functionName: "monochrome", fromMetalLibraryData: data)
 let sampler = CISampler(image: inputImage)
 let outputImage = kernel.apply(extent: image.extent, roiCallback: { _, rect in rect }, arguments: [sampler])

根据Apple: “您需要设置这些标志以将MSL用作CIKernel的着色器语言。您必须在Xcode中在项目目标的Build Settings选项卡下指定一些选项。您需要指定的第一个选项是Other中的-fcikernel标志。 Metal Compiler Flags选项,第二个是使用名为MTLLINKER_FLAGS的键添加用户定义的设置,该键的值为-cikernel: enter image description here