2016-04-19 10 views
0
var img   : CGImageRef 
    do { 
     img = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
    let frameImg : UIImage = UIImage(CGImage: img) 
    return frameImg 

Der Fehler, den ich aus der get ‚lassen frameImg‘ line:Wie instanziiere ich ein falsches CGImageRef-Objekt?

Variable 'img' used before being initialized 

Also ich denke, ich brauche das ‚img‘ Objekt vor den Klammern tun zu initialisieren. Was ist der einfachste Weg, dies zu tun?

Es scheint keinen einfachen, einfach zu bedienenden Konstruktor für das CGImageRef-Objekt in der Apple-Dokumentation zu geben.

Habe ich diesen Code völlig falsch entworfen?

+0

Make 'img' eine optionale und prüfen, ob wurde richtig eingestellt ist, bevor Sie es (wenn es um die' UIImage frameImg' Zuweisung) – dirkgroten

+0

Compiler benachrichtigt Sie, dass 'img' wird vor der Initialisierung im Fall' verwendet werden copyCGImageAtTime 'wird scheitern. – Avt

Antwort

0

versuchen, etwas wie folgt aus:

do { 
    var img = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 
    let frameImg: UIImage = UIImage(CGImage: img) 
    return frameImg 
} catch { 
    fatalError(error.localizedDescription) 
    // it's up to you how to handle error; you can crash the app or return some other CGImageRef 
} 
-1

Einfach fix:

var img   : CGImageRef? 
    do { 
     img = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
    let frameImg : UIImage = UIImage(CGImage: img!) 
    return frameImg 

Hinweis das '?' um die Variable optional zu machen

+0

Dies stürzt ab, falls copyCGImageAtTime fehlschlägt. – Avt

0

Es ist nicht klar, was das Bild sein soll, wenn copyCGImageAtTime einen Fehler auslöst. Ich nehme an, Sie wollen ein transparentes Bild.

func frameImage(atTime time: CMTime) -> UIImage { 
    var transparentSinglePixelImage: CGImage { 
     let context = CGBitmapContextCreate(nil, 1, 1, 8, 4, CGColorSpaceCreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst.rawValue | CGBitmapInfo.ByteOrder32Little.rawValue) 
     return CGBitmapContextCreateImage(context)! 
    } 

    var cgImage: CGImage? 
    do { 
     cgImage = try assetImgGenerate.copyCGImageAtTime(time, actualTime: nil) 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 

    return UIImage(CGImage: cgImage ?? transparentSinglePixelImage) 
} 
Verwandte Themen