2016-12-08 4 views
0

Ich versuche ein UIImage von einem CMSampleBuffer zu erfassen, um den Text zu lesen. Aber ich bekomme immer den Fehler:capture UIImage von CMSampleBuffer (swift 3)

Ich schaute mich um und versuchte viele Versionen. Aber ich bekomme immer den gleichen Fehler.

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) { 

     let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) 
     let image = CIImage(cvPixelBuffer: pixelBuffer!) 
      let uiImage = UIImage(cgImage: image.cgImage!) 
} 

freundlich Grüße!

+0

Sie sagen nicht, welche Unwrap den Fehler verursacht. 'image' oder' uiImage'? –

+0

Sie verwenden den falschen uiimage-Initialisierer. Sie müssen ciimage anstelle von cgimage verwenden –

Antwort

1

CIImage.cgImage gilt nur, wenn der CIImage von einem CGImage erstellt wurde. Wenn Sie einen CIImage aus einem Pixelpuffer erstellen, hat es keine CGImage zugrundeliegende Eigenschaft, so dass die Eigenschaft null ist.

Sie können initialize a UIImage direct from a CIImage, aber wie das für Sie funktioniert, hängt davon ab, wo/wie Sie das Bild rendern. (Zum Beispiel Darstellung CI-backed UIImage s in, sagen wir, UIImageView schlechte Leistung in iOS 9 und älter gibt, wenn Sie es in Echtzeit tun.)

-1

Um die UIImage über CIImage erhalten Sie CIContext verwenden sollten. Im Folgenden finden Sie Obj-C-Code:

CIContext *context = [CIContext contextWithOptions:nil]; 

Und dann:

CGImageRef cgImage = [context createCGImage:yourCIImage fromRect:[yourCIImage extent] ]; 
UIImage *resultUIImage = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:UIImageOrientationUp]; 

Dieser Ansatz behauptet, es GPU nur verwendet und ist somit schnell. Aber es gibt andere Methoden, um UIImage aus dem CVPixelBuffer zu erhalten, wie mit CGContextRef.

Verwandte Themen