Как создать UIImage из CGImage в Swift?
Я пытаюсь создать UIImage
из метода ALAssetsGroup#posterImage
. В Objective-C я мог просто вызвать [UIImage imageWithCGImage:group.posterImage]
, но в Swift, UIImage(CGImage: group.posterImage)
дает мне ошибку компилятора:
Could not find an overload for 'init' that accepts the supplied arguments
Что я делаю неправильно?
Ответы
Ответ 1
Если вы посмотрите на документы в Xcode6, вы увидите, что posterImage()
возвращает Unmanaged<CGImage>!
(в Swift, в ObjC он возвращает CGImageRef
). После некоторого расследования из docs я нашел это:
Когда вы получаете неуправляемый объект из неавтоматизированного API, вы должен немедленно преобразовать его в объект, управляемый памятью работать с ним.
Итак, ваше решение будет:
UIImage(CGImage: group.posterImage().takeUnretainedValue())
Ответ 2
Вы уверены, что group.posterImage не является необязательным?
Вы пробовали
var img = UIImage(CGImage: group.posterImage!)
Ответ 3
Используйте init с CGIImage:
UIImage.init(CGImage: group.posterImage, scale: self.scale, orientation: .UpMirrored)
Ответ 4
Вот пример, который должен работать для вас с Xcode 8.3:
let frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 1920, height: 1080))
let cgImage = CIContext().createCGImage(CIImage(color: .black()), from: frame)!
let uiImage = UIImage(cgImage: cgImage)