CGBitmapContextCreate运行时可选nil错误

时间:2016-01-03 06:10:46

标签: ios swift runtime-error avfoundation optional

当我运行程序时,有一个可选项导致它破坏。我能够将其缩小到这两行代码。代码中是否存在问题,我该如何解决?谢谢!

let context: CGContextRef = CGBitmapContextCreate(lumaBuffer, width, height, 8, bytesPerRow, grayColorSpace, CGImageAlphaInfo.PremultipliedLast.rawValue)!//problematic

let dstImageFilter: CGImageRef = CGBitmapContextCreateImage(context)!

但这是相关的代码:

func captureOutput(captureOutput: AVCaptureOutput, didOutputSampleBuffer sampleBuffer: CMSampleBufferRef, fromConnection connection: AVCaptureConnection) {
    print("buffered")
    let imageBuffer: CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)!
    CVPixelBufferLockBaseAddress(imageBuffer, 0)
    let width: size_t = CVPixelBufferGetWidthOfPlane(imageBuffer, 0)
    let height: size_t = CVPixelBufferGetHeightOfPlane(imageBuffer, 0)
    let bytesPerRow: size_t = CVPixelBufferGetBytesPerRowOfPlane(imageBuffer, 0)
    let lumaBuffer: UnsafeMutablePointer = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0)
    let grayColorSpace: CGColorSpaceRef = CGColorSpaceCreateDeviceGray()!
    let context: CGContextRef = CGBitmapContextCreate(lumaBuffer, width, height, 8, bytesPerRow, grayColorSpace, CGImageAlphaInfo.PremultipliedLast.rawValue)!//problematic

    let dstImageFilter: CGImageRef = CGBitmapContextCreateImage(context)!
    dispatch_sync(dispatch_get_main_queue(), {() -> Void in
        customPreviewLayer!.contents = dstImageFilter as AnyObject
    })
}

1 个答案:

答案 0 :(得分:1)

如果由于参数不正确而无法创建上下文,则

<div class="lt" align="left"> <ul class="list-style-none"> <li><a href="">A</a></li> <li><a href="">B</a></li> <li><a href="">C</a></li> <li><a href="">D</a></li> <li><a href="">E</a></li> </ul> </div> 将返回nil。由于我们没有所有参数,因此我们无法告诉您更多关于它失败的原因。您可以检查日志消息,因为它通常会在失败时显示半有用的日志消息。