如何在Swift中从CGImage创建UIImage?

rdrgkggo  于 2023-02-21  发布在  Swift
关注(0)|答案(4)|浏览(127)

我试图从ALAssetsGroup#posterImage方法创建一个UIImage,在Objective-C中,我可以简单地调用[UIImage imageWithCGImage:group.posterImage],但在Swift中,UIImage(CGImage: group.posterImage)给我一个编译器错误:

Could not find an overload for 'init' that accepts the supplied arguments

我哪里做错了?

7cjasjjr

7cjasjjr1#

如果你看一下Xcode6中的文档,你会发现posterImage()返回一个Unmanaged<CGImage>!(在Swift中,在ObjC中,它返回一个CGImageRef)。
当您从未注解的API接收到非托管对象时,应该在使用它之前立即将其转换为内存托管对象。
因此,您的解决方案是:

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

7ajki6be2#

2023语法更新:
someImage = UIImage(cgImage: someCGImage)

典型示例是从CALayer获取图像:

someImage = UIImage(cgImage: donorLayer.contents as! CGImage)

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

var img = UIImage(CGImage: group.posterImage!) // 2010s syntax
gg58donl

gg58donl3#

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

oxf4rvwz4#

对CGIImage使用init:

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

相关问题