画像処理を施す

ここまでのチャプターでは、 IC Imaging Control がひとつのイメージバッファしか持たないようにも見えますが、実際にはIC Imaging Control は画像データの保存に複数の イメージバッファを活用 します。それらがどのようにIC Imaging Control 内において体系化されており、またどのようにプログラムがアクセスするのかを説明します。IC Imaging Control は画像データの保存にはリングバッファというものを使用しており、ここではその概念について説明します。

リングバッファとは何か

リングバッファは次に述べるような形でアクセスされるイメージバッファの配列のことを指します。: IC Imaging Control が画像取り込みデバイスから来た最初のフレームをリングバッファの第一エレメントに書き込み、2つめのフレームを第二エレメントに書き込み, という具合に順に行っていき、リングバッファの最後のエレメントにフレームが書き込まれた後、 IC Imaging Control は次のフレームを第一エレメントに書き込みます。その際最初のフレームは上書きされることになります。

リングバッファには以下のような利点があります。

  • 一つのイメージバッファにある画像の処理を行うと同時に、他のバッファへ画像データの書き込みを行うことが可能となります。
  • 画像データをコピーすることなく、前に取得した画像へのアクセスが可能です。過去にさかのぼってフレームを見れるため、画像処理関数でイベントを検出(動作検知など) する場合に有効です。

イメージバッファへのアクセスの仕方

インデックスベースでのアクセスは ImageBuffersクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink.ImageBuffers Property コレクションより提供されます。例えば最初のバッファにアクセスしたい場合、次のようなコードを使用します。

[VB.NET]
Dim FirstBuffer As TIS.Imaging.ImageBuffer
FirstBuffer = IcImagingControl1.ImageBuffers(0)
[C#]
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を呼び出してください。