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
}