2016-12-08 82 views
0

我嘗試從CMSampleBuffer捕獲UIImage以讀取文本。但我總是得到錯誤:從CMSampleBuffer捕獲UIImage(swift 3)

fatal error: unexpectedly found nil while unwrapping an Optional value 

我四處張望,並嘗試了很多版本。但我總是得到同樣的錯誤。

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!) 
} 

親切的問候!

+0

你不會說哪個解包是拋出錯誤。 'image'還是'uiImage'? –

+0

您正在使用錯誤的uiimage初始值設定項。你需要使用ciimage而不是cgimage –

回答

1

CIImage.cgImage僅當CIImageCGImage創建時適用。當您從像素緩衝區創建CIImage時,它沒有標的CGImage,因此屬性爲零。

你可以initialize a UIImage direct from a CIImage,但這對你的作品將取決於你在哪裏/如何渲染圖像。 (例如渲染CI支持UIImage S IN,比方說,UIImageView給出的iOS 9業績不佳和老年人,如果你在實時做這件事。)

-1

要獲得的UIImage通過CIImage你應該使用CIContext。 下面是的OBJ-C代碼:

CIContext *context = [CIContext contextWithOptions:nil]; 

然後:

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

該方法聲稱它僅使用GPU並因此快。 但是還有其他方法可以從CVPixelBuffer獲得UIImage,就像使用CGContextRef一樣。

相關問題