画像処理を施す
ここまでのチャプターでは、 IC Imaging Control がひとつのイメージバッファしか持たないようにも見えますが、実際にはIC Imaging Control は画像データの保存に複数の イメージバッファを活用 します。それらがどのようにIC Imaging Control 内において体系化されており、またどのようにプログラムがアクセスするのかを説明します。IC Imaging Control は画像データの保存にはリングバッファというものを使用しており、ここではその概念について説明します。
リングバッファとは何か
リングバッファは次に述べるような形でアクセスされるイメージバッファの配列のことを指します。: IC Imaging Control が画像取り込みデバイスから来た最初のフレームをリングバッファの第一エレメントに書き込み、2つめのフレームを第二エレメントに書き込み, という具合に順に行っていき、リングバッファの最後のエレメントにフレームが書き込まれた後、 IC Imaging Control は次のフレームを第一エレメントに書き込みます。その際最初のフレームは上書きされることになります。
リングバッファには以下のような利点があります。
- 一つのイメージバッファにある画像の処理を行うと同時に、他のバッファへ画像データの書き込みを行うことが可能となります。
- 画像データをコピーすることなく、前に取得した画像へのアクセスが可能です。過去にさかのぼってフレームを見れるため、画像処理関数でイベントを検出(動作検知など) する場合に有効です。
イメージバッファへのアクセスの仕方
インデックスベースでのアクセスは ImageBuffersクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink.ImageBuffers Property コレクションより提供されます。例えば最初のバッファにアクセスしたい場合、次のようなコードを使用します。
Dim FirstBuffer As TIS.Imaging.ImageBuffer
FirstBuffer = IcImagingControl1.ImageBuffers(0)
TIS.Imaging.ImageBuffer FirstBuffer;
FirstBuffer = icImagingControl1.ImageBuffers[0];
バッファをロックする
もしIC Imaging Controlがデータをバッファにコピーするのを止めたい場合には、ImageBuffer.Lockクラスライブラリリファレンス>クラス>ImageBuffer>ImageBuffer.Lock Methodを呼び出してバッファをロックすることができます。バッファにて一定以上の時間を要する画像処理を行っている間に、IC Imaging Control が処理中のデータに別のデータを上書きしてしまうのを防ぐことができます。
バッファへのロックを解除する時は ImageBuffer.Unlockクラスライブラリリファレンス>クラス>ImageBuffer>ImageBuffer.Unlock Methodを呼び出してください。