Ошибка Swift в консоли "Функция ROI CIKernel не позволила мозаику"

Полная ошибка: "Не удалось отобразить 921600 пикселей, поскольку функция ROI в CIKernel не позволяла использовать мозаику". каждый раз, когда я пытаюсь преобразовать изображение с помощью перевода.

Код это просто:

    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: функция ROI в CIKernel не позволяла использовать тайлы

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 "достаточно хорошо", но эта ссылка "достаточно близка".
Другие вопросы по тегам