如何在Swift中从CGImage创建UIImage?

时间:2014-06-20 03:45:17

标签: uiimage swift core-foundation cgimage

我尝试使用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

我做错了什么?

4 个答案:

答案 0 :(得分:28)

如果您查看Xcode6中的文档,您会看到posterImage()返回Unmanaged<CGImage>!(在Swift中,在ObjC中它返回CGImageRef)。经过docs的一些调查后我发现了这个:

  

当您从未注释的API收到非托管对象时,您   应该立即将它转换为内存管理对象   与之合作。

所以你的解决方案是:

UIImage(CGImage: group.posterImage().takeUnretainedValue())

答案 1 :(得分:3)

你确定group.posterImage不是可选的吗?

你试过吗

var img = UIImage(CGImage: group.posterImage!)

答案 2 :(得分:1)

以下是一个适用于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)

答案 3 :(得分:0)

将init与CGIImage一起使用:

UIImage.init(CGImage: group.posterImage, scale: self.scale, orientation: .UpMirrored)