web-dev-qa-db-ja.com

SwiftでCGImageからUIImageを作成するにはどうすればよいですか?

_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
_

何が悪いのですか?

18
Bill

Xcode6のドキュメントを見ると、posterImage()Unmanaged<CGImage>!を返すことがわかります(Swiftでは、ObjCではCGImageRefを返します)。 docs から調査したところ、次のことがわかりました。

注釈なしのAPIからアンマネージオブジェクトを受け取ったら、それを操作する前に、すぐにメモリマネージオブジェクトに変換する必要があります。

だからあなたの解決策は:

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

Group.posterImageはオプションではありませんか?

やってみました

var img = UIImage(CGImage: group.posterImage!)
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)

CGIImageでinitを使用します。

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