【发布时间】:2019-05-31 22:34:39
【问题描述】:
我最近升级到 Xcode 10.2,我的 CIColorKernel 代码不再工作。 CIColorKernel 函数返回 nil,我收到警告 - 'init(source:)' was deprecated in OS X 10.14: Core Image Kernel Language API deprecated.
Metal Shading Language 是 CIColorKernel 唯一可用的替代方案吗?看起来 MSL 需要为自定义过滤器创建一个单独的文件,我想检查是否有更好的选择。
// Create custom Kernel to replace gray color with black or white.
//Kernel is nil because 'init(source:)' was deprecated in OS X 10.14.
let Kernel = CIColorKernel( source:
"kernel vec4 replaceGrayWithBlackOrWhite(__sample grayImage) {" +
"if (s.r > 0.25 && s.g > 0.25 && s.b > 0.25) {" +
" return vec4(0.0,0.0,0.0,1.0);" +
"} else {" +
" return vec4(1.0,1.0,1.0,1.0);" +
"}" +
"}"
)
// Apply the filter
let blackAndWhiteImage = replaceGrayKernel?.apply(extent: ((grayImage?.extent)! ), arguments: [grayImage as Any])
【问题讨论】:
-
有趣。我的内核在 iOS 12 和 iOS 13 beta 中工作。也许是因为我仍然以 iOS 9.0 为基础。针对 iOS 13 的新项目会产生与您相同的错误。如果您的项目不是
SwiftUI项目,那么如果您以 macOS 10.13 为目标会发生什么? (并且作为记录,您可能应该考虑迁移到 Metal,即使针对较低的操作系统版本有效..) -
好消息!发现问题。将使用正确的信息编辑我的答案。
-
另一个不尊重alpha的代码gist.github.com/xhruso00/a3f8a9c8ae7e33b8b23d
标签: swift deprecated cifilter