Изображение из CIFilter не будет отображаться - PullRequest
0 голосов
/ 30 января 2019

Я делаю снимок подпредставления и превращаю его в изображение:

let image = UIImage(view: swiftyDraw)
let scaledImage = scaleImage(image: image, toSize: CGSize(width: 28, height:28))

finalImage - это UIImageView, и настройка его для отображения scaledImage работает, я вижу это прекрасно:

finalImage.image = scaledImage //this works

Тем не менее, я хочу инвертировать цвета перед его отображением:

let filter = CIFilter(name: "CIColorInvert")
filter!.setValue(CIImage(image: scaledImage), forKey: kCIInputImageKey)
let invertedImage = UIImage(ciImage: filter!.outputImage!)
finalImage.image = invertedImage //this does not work

Ничего не отображается, когда я устанавливаю finalImage.image в invertedImage, но хорошо отображается, когда установленоscaledImage.

Редактировать: функция scaleImage:

func scaleImage (image: UIImage, toSize size:CGSize) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(size, false, 1.0)
    image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
}

1 Ответ

0 голосов
/ 30 января 2019

Допустим, ваше scaledImage - UIImage, поэтому вы можете напрямую получить CIImage без создания нового.

guard let ciImage = scaledImage.ciImage, let filter = CIFilter(name: "CIColorInvert") else {
    fatalError("CIImage conversion fail")
}
//Now access the CIFilter object to filter the image
filter.setValue(ciImage, forKey: kCIInputImageKey)
finalImage.image = UIImage(ciImage: filter.outputImage!)

Обновление

В случае, если вы fatalError означает, что UIImage не существует с CIImage, вам необходимо преобразовать UIImage в CIImage.

extension UIImage {
    var toCIImage: CIImage {
        return self.CIImage ?? CIImage(CGImage: self.CGImage!)
    }
}

guard let filter = CIFilter(name: "CIColorInvert") else {
    fatalError("CIImage conversion fail")
}

let ciImage = scaledImage.toCIImage
//Now access the CIFilter object to filter the image
filter.setValue(ciImage, forKey: kCIInputImageKey)
finalImage.image = UIImage(ciImage: filter.outputImage!)
...