我想使用Apple开发者页面中的一个示例。 Apple Dev Pages on AVFoundation
现在,我使用了imageFromSampleBuffer:sampleBuffer
方法,正如文档所解释的那样。我在Swift写作,所以我尽可能地从Obj-C转换到Swift 2。
我忍不住收到有关invalid data bytes/row: should be at least 7680 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipledFirst
和CGBitmapContextCreateImage: invalid context 0x0.
func imageFromSampleBuffer(sampleBuffer: CMSampleBufferRef) -> UIImage {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
CVPixelBufferLockBaseAddress(imageBuffer!, 0)
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer!)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
let width = CVPixelBufferGetWidth(imageBuffer!)
let height = CVPixelBufferGetHeight(imageBuffer!)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, CGImageAlphaInfo.PremultipliedFirst.rawValue)
let qImage = CGBitmapContextCreateImage(context)
CVPixelBufferUnlockBaseAddress(imageBuffer!, 0)
let image = UIImage(CGImage: qImage!)
return(image)
}
这就是我称之为该方法的方式:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
print("Delegate called")
let image = imageFromSampleBuffer(sampleBuffer)
print(image)
}
我完全不知道如何继续。
答案 0 :(得分:1)
CGBitmapContextCreate
的可接受参数列表