静止画をキャプチャし保存する

ビデオストリームより静止画をキャプチャしBMPファイルとして保存する方法を説明します。
今回のサンプルプログラムのC#用のソースコードはMy Documents/IC Imaging Control 3.5内の以下ののディレクトリに格納されています。

samples\C# *\Grabbing an Image


プロジェクトの新規作成

新しいプロジェクトを作成し、IC imaging Controlをフォームに追加してください。プログラムを実行する前に、はじめに:Visual Studio .NETプログラマーズガイド>Visual Studioでスタートにあるように映像デバイスの選択、入力方式、ビデオフォーマットを選択してください。もしくはデバイスを選択せずにプログラムを実行してください。その際はIC Imaging Controlによってデバイス選択のダイアログが出現します。選択をせずにダイアログを閉じた場合、プログラムはエラーメッセージを表示し、終了します。
フォームに3つのボタンを追加し、 Captionプロパティをそれぞれ"Start Live"、 "Stop Live" 、"Save Bitmap"とします。 それぞれcmdStartLivecmdStopLivecmdSaveBitmapと 名前を付けます。
まずはIC Imaging ControlのLiveStartLiveStopメソッドへのコールを追加します。

[C#]
private void cmdStartLive_Click( object sender, EventArgs e )
{
     icImagingControl1.Sink = new TIS.Imaging.FrameSnapSink();
     icImagingControl1.LiveStart();
     cmdStartLive.Enabled = false;
     cmdStopLive.Enabled = true;
     cmdSaveBitmap.Enabled = true;
}

[C#]
private void cmdStopLive_Click( object sender, EventArgs e )
{
      icImagingControl1.LiveStop();
      cmdStartLive.Enabled = true;
      cmdStopLive.Enabled = false;
      cmdSaveBitmap.Enabled = false;
}

ここでは FrameSnapSink を使用しています。これは静止画保存機能が組み込まれた Sink Typeです。
これにより、cmdSaveBitmap ボタンの動作を指定することができます。
[C#]
private void cmdSaveBitmap_Click( object sender, EventArgs e )
{
     TIS.Imaging.FrameSnapSink snapSink = icImagingControl1.Sink as TIS.Imaging.FrameSnapSink;
     TIS.Imaging.IFrameQueueBuffer frm = snapSink.SnapSingle(TimeSpan.FromSeconds(5));

    SaveFileDialog saveFileDialog1; = new SaveFileDialog();
    saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "bmp files (*.bmp)|*.bmp|All files (*.*)|*.*";
    saveFileDialog1.FilterIndex = 1;
    saveFileDialog1.RestoreDirectory = true;

    if ( saveFileDialog1.ShowDialog() == DialogResult.OK )
     {
        frm.SaveAsBitmap(saveFileDialog1.FileName);
     }
}

この中の1行目では、cmdStartLive_Clickで登録したFrameSnapSinkを呼び出しています。
2行目では、Sinkに入る次のフレームを5秒間待っています。
残りの部分で、SaveFileDialogを表示し、ビットマップイメージをFrameExtensions.SaveAsBitmap を使って保存しています。