Swift: UIGraphicsImageRendererFormat вместо UIGraphicsBeginImageContext, возвращающий пустое изображение

Я заменяю UIGraphicsBeginImageContext на UIGraphicsImageRendererFormat, чтобы оптимизировать производительность и модернизировать мой код. По какой-то причине UIGraphicsImageRendererFormat возвращает пустое изображение в моей функции. Я должен делать что-то не так!

Старая функция: (работает нормально)

func drawImageInRect(inputImage: UIImage, inRect imageRect: CGRect) -> UIImage {

    UIGraphicsBeginImageContext(self.size)
    self.draw(in:(CGRect(x:0.0, y:0.0, width:self.size.width, height:self.size.height)))
    inputImage.draw(in:(imageRect))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
}

Новая функция: (ничего не рисует)

func drawImageInRect(inputImage: UIImage, inRect imageRect: CGRect) -> UIImage {


    let renderFormat = UIGraphicsImageRendererFormat.default()
    renderFormat.opaque = true
    let renderer = UIGraphicsImageRenderer(size: self.size, format: renderFormat)

    let scaledImage = renderer.image {
        (context) in
        inputImage.draw(in: imageRect)
    }
    return scaledImage
}

1 ответ

Проблема в том, что в вашей обновленной функции вы забыли нарисовать self Таким образом, вы получите черный фон, где должно быть оригинальное изображение.

func drawImageInRect(inputImage: UIImage, inRect imageRect: CGRect) -> UIImage {
    let renderFormat = UIGraphicsImageRendererFormat.default()
    renderFormat.opaque = true
    let renderer = UIGraphicsImageRenderer(size: self.size, format: renderFormat)

    let scaledImage = renderer.image {
        (context) in
        // Add the following missing line
        self.draw(in:(CGRect(x:0.0, y:0.0, width:self.size.width, height:self.size.height)))
        inputImage.draw(in: imageRect)
    }
    return scaledImage
}
Другие вопросы по тегам