1

完整错误是“无法渲染 921600 像素,因为 CIKernel 的 ROI 功能不允许平铺。” 每次我尝试用翻译转换 ciImage 时。

代码很简单:

    var flippedGradient = gradient.transformed(by:CGAffineTransform(scaleX: -1, y: 1))
    flippedGradient = gradient.transformed(by:CGAffineTransform(translationX: flippedGradient.extent.width, y: 0)) // causes error

    // mask hue 2 with gradient with transparent background
    let alphaMaskBlend2 = CIFilter(name: "CIBlendWithAlphaMask",
                                   withInputParameters: [kCIInputImageKey: hue2,
                                                         kCIInputBackgroundImageKey: transBGCI,
                                                         kCIInputMaskImageKey:flippedGradient])?.outputImage

进行翻译会导致错误并使我整个屏幕变灰,而不是正常渲染图像。

相关线程,没有与我如何翻译 ciImage 相关的分辨率: iOS 10:CIKernel 的 ROI 功能不允许平铺

4

1 回答 1

1

原谅我迟到了,但我刚刚遇到了同样的错误,可能会有一些帮助。我使用了不同的滤镜 ( CIShadedMaterial) 并通过将图像缩小到更小的尺寸来解决它。这是我的代码:

extension UIImage {
    func resizeToBoundingSquare(_ boundingSquareSideLength : CGFloat) -> UIImage {
        let imgScale = self.size.width > self.size.height ? boundingSquareSideLength / self.size.width : boundingSquareSideLength / self.size.height
        let newWidth = self.size.width * imgScale
        let newHeight = self.size.height * imgScale
        let newSize = CGSize(width: newWidth, height: newHeight)
        UIGraphicsBeginImageContext(newSize)
        self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();
        return resizedImage!
    }

用法:

myImage = myImage.resizeToBoundingSquare(640)
  • 我最初使用 4096 并意识到我把它留在了里面。
  • 信用真的需要去西蒙格拉德曼。我找不到我发现使用 640x640“足够好”但这个链接“足够接近”的确切位置。
于 2018-03-16T15:18:26.180 回答