У меня есть временная переменная tmpPixelBuffer
с данными буфера пикселя, которая не является nil
, а когда обнаружены объекты метаданных, я хочу создать изображение из этого буфера, чтобы я мог обрезать изображения метаданных с этого изображения.Как скопировать CVImageBuffer в UIImage?
Изображение всегда nil
, что делать неправильно?
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
tmpPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
}
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
let image = CIImage(CVPixelBuffer: tmpPixelBuffer)
let context = CIContext()
let cgiImage = context.createCGImage(image, fromRect: image.extent())
let capturedImage = UIImage(CGImage: cgiImage)
...
}
Я также попытался это сделать так:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
let image = CIImage(CVPixelBuffer: tmpPixelBuffer)
let context = CIContext(options: nil)
let cgiImage = context.createCGImage(image, fromRect: CGRect(x: 0, y: 0, width: Int(CVPixelBufferGetWidth(tmpPixelBuffer)), height: Int(CVPixelBufferGetHeight(tmpPixelBuffer))))
...
}
Но в этом случае UIImage не читается.
Я думаю, что если выходной формат не был BGRA, то вы получили мусор обратно. Просто догадка. Кстати, почему вы не дали ответ Андреа, который дал вам очень приятную функцию (я знаю - ее ObjC). –