我想为我的应用程序使用本机过滤器,该功能可以工作,但我想避免从文档中删除的方法。我在整个互联网上搜索,没有解决方案。
我在整个互联网上进行搜索,但是我没有找到解决问题的办法。
public func applyFilterTo(image: UIImage, filterEffect: Filter) -> UIImage? {
guard let cgImage = image.cgImage,
let openGLContext = EAGLContext(api: .openGLES3) else {
return nil
}
let context = CIContext(eaglContext: openGLContext)
let ciImage = CIImage(cgImage: cgImage)
let filter = CIFilter(name: filterEffect.filterName)
filter?.setValue(ciImage, forKey: kCIInputImageKey)
if let filterEffectValue = filterEffect.filterEffectValue, let filterEffectValueName = filterEffect.filterEffectValueName {
filter?.setValue(filterEffectValue, forKey: filterEffectValueName)
}
var filteredImage: UIImage?
if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage,
let cgiImageResult = context.createCGImage(output, from: output.extent) {
filteredImage = UIImage(cgImage: cgiImageResult)
}
return filteredImage
}
结果很好,但是我担心的是我的应用程序中的警告无效。谢谢
答案 0 :(得分:2)
EAGLContext是OpenGL的一部分,已弃用。您应该在此阶段switch to Metal。
答案 1 :(得分:0)
您并不一定需要切换到 Metal。
如果你只是想避免这些警告,但又不想切换到 Metal 因为它可能是一种矫枉过正(就像我的情况)或大量的时间投资,你总是可以在编译器中设置标志来避免这些警告。
如果您将鼠标悬停在警告本身上,它会告诉您要激活的特定标志(即 CI_SILENCE_GL_DEPRECATION)。
然后您只需转到您的项目文件 > 构建设置 > 选择“全部”并搜索“标志”> Apple Clang - 自定义编译器标志 > 插入标志。还要检查 Swift Compiler - Custom Flags。