2011-08-05 9 views
2

ここで、以下のようにavfoundationを使用して画像をキャプチャできます。しかし、イメージ(例えば、20または30イメージ)を連続的にキャプチャするにはどうすればよいですか?あなたが記述シナリオが最も簡単にタイマーのいくつかの並べ替えを使用することによって解決されるだろうiPhoneでAVFoudationを使用した連続キャプチャ画像

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) 
{ 
    CFDictionaryRef exifAttachments = CMGetAttachment(imageSampleBuffer, kCGImagePropertyExifDictionary, NULL); 
    if (exifAttachments) 
    { 
     // Do something with the attachments. 
     NSLog(@"attachements: %@", exifAttachments); 
    } 
    else 
     NSLog(@"no attachments"); 

    NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; 
    UIImage *image = [[UIImage alloc] initWithData:imageData]; 

    // use the image 

}]; 
+0

(D)SLRの「バースト」モードのような意味ですか? – danyowdee

+0

いいえ、danyowdee。私はちょうど1つのイメージをスナップしたい、そしてもう1秒後に... –

答えて

2

おっと、私はあなたのコメントをフォローアップするのを忘れました。
はあなたが必要とする精度のどのレベルに応じて、探すために別の候補があります

  1. 繰り返しNSTimerが使用するのは簡単かつ単純明快です。このクラスはランループと連携しているので、注意すべきいくつかの落とし穴があります.1つは、精度が限られていることです(ただし、あなたが望みどおりにしたいと思うものについては、まったく問題ではないはずです)。
  2. NSTimerを使うことができます:initWithFireDate:…repeats:NOを使用して、新しい方法でタイマーを作成します(古いもののfireDateとの日付を使用して) 1つは発火する。
  3. 実際にに高度の精度が必要な場合は、ディスパッチタイマーを調べる必要があります。彼らはGCDの一部であり、したがってかなり低いレベルの技術です。正確にこのパスに従うことにした場合は、おそらくdispatch_source_createの呼び出しで独自のディスパッチキューを使用する必要があります。

いずれの場合でも、画像をスナップするためのコードはそれぞれのハンドラに入ります。

+0

ありがとう!私はNSTimerを使ってイメージをキャプチャします。しかし、それはあまりにも迅速にキャプチャすることはできません。この "imageSampleBuffer in NULL"のようなエラーを返しました... –

+0

それは奇妙な音です。より詳細な情報を提供できますか? 'imageSampleBuffer'が' NULL'のときに完了ハンドラに渡された正確なエラーは何ですか?そして:あなたのプログラムにデバッガが接続されていなくても、あなたがデバイス上で走っているときにそれはまだ発生していますか? – danyowdee

+0

私も同様の問題があります。互いに5秒以内であっても、複数のcaptureStillImageAsynchronouslyFromConnection呼び出しを呼び出すと、すべての画像がキャプチャされるまで後続の呼び出しが失敗する(おそらく最初のバッファが上書きされる)まで、前の呼び出しが完了するのを妨げるようです。この問題を解決するためのいくつかの作業コードを見ることに非常に興味があります。 – Meekohi

関連する問題