2012-09-20 59 views
0

我從相機上使用AVCaptureVideoDataOutput獲得的圖像。我檢查pixelBuffer在我captureOutput:如何從相機保存圖像以備後續處理?

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
    didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
    fromConnection:(AVCaptureConnection *)connection { 

    CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

如果我找到了我想要的pixelBuffer,那麼我想保存此圖像關閉後的圖像處理。

我看到三個選項,我想知道這是最好的使用方法:

  1. 我可以節省sampleBuffer或做它的一個副本
  2. 我可以節省pixelBuffer或做它
  3. 副本
  4. 我可以從pixelBuffer做一個CGImage並保存,並在稍後當我需要做我的圖像處理時,我可以使用CGBitmapContextGetData()找回一個位圖來操作。似乎在這裏有一堆不需要的副本,我可以不做。

哪一個是保存在位圖周圍稍後處理的首選方式?我不需要保存位圖的時間超過幾分鐘,即不需要保存到文件系統。如果答案是1或2,那麼我能不能保持緩衝器或我需要做一個mallocmemcpy複製呢?

回答

0

我做3),但你必須像素緩衝區拷貝到新的malloc內存作爲其唯一有效的一瞬間你是在該回調。我用這種技術每秒抓取30幀。