2

我想为我的应用程序使用本机过滤器,该功能有效,但我想避免将从文档中删除的方法。我在整个互联网上搜索,没有解决方案。

我在整个互联网上搜索,但我没有找到任何解决我的问题的方法。

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

}

结果很好,但我担心我的应用程序中的警告无效。谢谢

4

2 回答 2

3

EAGLContext 是已弃用的 OpenGL 的一部分。你应该在这个阶段切换到 Metal

于 2019-04-08T23:12:25.043 回答
0

你并不一定需要切换到 Metal。

如果您只是想避免这些警告,但又不想切换到 Metal,因为它可能是过度杀伤(如我的情况)或大量投资,您始终可以在编译器中设置标志以避免这些警告。

如果您将鼠标移过警告本身,它将让您知道要激活的特定标志(即 CI_SILENCE_GL_DEPRECATION)。

然后您只需转到您的项目文件 > 构建设置 > 选择“全部”并搜索“标志”> Apple Clang - 自定义编译器标志 > 插入标志。还要检查 Swift 编译器 - 自定义标志。

于 2021-01-01T14:51:43.930 回答