在Swift中从CMSampleBuffer创建CGImage?

时间:2014-07-30 23:46:11

标签: ios swift core-graphics avfoundation core-image

以下是我尝试的解决方案中所有相关部分的摘要。

尝试#1

CVPixelBufferLockBaseAddress(buffer, 0)

let ctx = CIContext()

let ciImage = CIImage(CVPixelBuffer: buffer)

let cgImage = ctx.createCGImage(ciImage, fromRect: CGRectMake(0, 0, CGFloat(size.width), CGFloat(size.height)))

CVPixelBufferUnlockBaseAddress(buffer, 0)

尝试#2

UIGraphicsBeginImageContext(CGSizeMake(CGFloat(size.width), CGFloat(size.height)))

let context = UIGraphicsGetCurrentContext()
let contextData = CGBitmapContextGetData(context)
CVPixelBufferLockBaseAddress(buffer, 0)
let bufferData = CVPixelBufferGetBaseAddress(buffer)
let bufferSize = CVPixelBufferGetDataSize(buffer)
memcpy(contextData, bufferData, bufferSize)
CVPixelBufferUnlockBaseAddress(buffer, 0)
let cgImage = UIGraphicsGetImageFromCurrentImageContext().CGImage

UIGraphicsEndImageContext()

尝试#3

let bufferAddress = CVPixelBufferGetBaseAddress(buffer)

let bytesPerRow = CVPixelBufferGetBytesPerRow(buffer)

let colorSpace = CGColorSpaceCreateDeviceRGB()

let provider = CGDataProviderCreateWithData(nil, bufferAddress, bytesPerRow * size.height, nil)

let cgImage = CGImageCreate(size.width, size.height, 8, 32, bytesPerRow, colorSpace, bitmapInfo, provider, nil, true, kCGRenderingIntentDefault)

非常感谢任何帮助!

0 个答案:

没有答案