自iOS 12 CIColorKernel(source:“ kernel string”)被弃用以来。你们中有人知道苹果可以替代吗?
我正在Swift中搜索自定义CIFilter。也许有一个开源库?
答案 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: