FrameHandlerSink::snapImages Method

スナップのジョブを並べて複数のフレームをMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionにコピーします。指定された枚数のフレームが取得されるかタイムアウトが発生した際にメソッドが戻ります。

構文

Error snapImages( unsigned int count, DWORD timeout = INFINITE );
パラメータ 説明
count MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionにコピーするフレーム数。
timeout この関数から戻るまでの時間(ミリ秒)。デバイスからはフレームが来ていないことが条件。

戻り値

実行した処理の状態を報告するエラーオブジェクト。処理が正常に行われたかを確認するにはError::isErrorクラスライブラリリファレンス>クラス>Error>Error::isError Methodを使用します。

備考

メソッドがタイムアウトになった場合、countのフレーム数の取得は保証できません。
このメソッドが戻る前にGrabberListener::frameReadyがすでにコールされている可能性があります。

ライブモードが開始されていなければこのメソッドが取り込み前にライブモードを開始しその後停止させます。ライブモードの開始は時間のかかる処理であるためsnapImageをコールする前にライブモードを開始させておくことが推奨されます。

サンプル

以下のサンプルはイメージを取り込みビットマップファイルに保存する方法です。MemBufferCollectionを保持するFrameHandlerSinkFrameHandlerSink::createクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::create Methodで作成し、Grabber::setSinkTypeクラスライブラリリファレンス>クラス>Grabber>Grabber::setSinkType Methodと一緒にGrabberに割り当てています。

// このキャストは前もってFrameHandlerSink をGrabberに割り当てている場合にのみ有効
tFrameHandlerSinkPtr pSink = m_Grabber.getSinkTypePtr();

// 1枚のイメージを取り込みMemBufferCollectionにコピー
Error e = pSink->snapImages( 1 );
if( e.isError() )
{
  // エラーの表示
  ::MessageBox( 0, e.toString().c_str(), "Error", MB_OK|MB_ICONERROR );
}
else
{
  // イメージをビットマップファイルに保存
  pSink->getLastAcqMemBuffer()->save( "image.bmp" );
}