如何实例化伪造的CGImageRef对象?

时间:2016-04-19 15:14:15

标签: ios swift

    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

我从“让帧”中得到的错误'行:

Variable 'img' used before being initialized

所以我认为我需要初始化' img'对象之前的对象。最简单的方法是什么?

对于Apple文档中的CGImageRef对象,似乎不是一个简单易用的构造函数。

我是否完全错误地设计了此代码?

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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 :(得分:0)

如果copyCGImageAtTime抛出错误,您还不清楚图像的内容。我假设你想要一个透明的图像。

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)
}

答案 2 :(得分:-1)

简单修复:

    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

注意'?'使变量可选