ROI・Binning・VideoFormatの設定
概要
本サンプルでは、フォームのロード時に指定したカメラを自動でオープンし、ROI やビニングを含む任意のビデオフォーマットとフレームレートを選択できるよう、二つのコンボボックス(「解像度/ビデオフォーマット」と「フレームレート」)を用意しています。
サンプルプログラム
Software | Software IC Imaging Control 3.5, Visual Studio™ 2022 |
---|---|
サンプル(C#) | ROI_Binning_VideoFormat_setting_cs_3.5.zip |
サンプルツールの外観
解説
フォーム立ち上げ時の処理
private void Form1_Load(object sender, EventArgs e)
{
// ───────── デバイスを指定 ─────────
icImagingControl1.Device = "DFK 33GR0234";
// ROI 取得したい解像度のリストを定義
List<Resolution> wantedformatlist = new List<Resolution>();
wantedformatlist.Add(new Resolution(640, 480));
wantedformatlist.Add(new Resolution(1024, 786));
wantedformatlist.Add(new Resolution(1440, 1024));
wantedformatlist.Add(new Resolution(1980, 1080));
wantedformatlist.Add(new Resolution(2048, 1536));
wantedformatlist.Add(new Resolution(2448, 2048));
wantedformatlist.Add(new Resolution(2592, 1944));
wantedformatlist.Add(new Resolution(3072, 2048));
wantedformatlist.Add(new Resolution(4000, 3000));
wantedformatlist.Add(new Resolution(5320, 4600));
List<string> formatlist = new List<string>();
foreach (var desc in icImagingControl1.VideoFormatDescs)
{
// 希望解像度を順にチェック
foreach (var wantedResolution in wantedformatlist)
{
// この解像度がキャプチャデバイスで使用可能か確認
if (desc.IsValidSize(wantedResolution.Width, wantedResolution.Height))
{
// 一時的な VideoFormat を作成
TIS.Imaging.VideoFormat tmpformat =
desc.CreateVideoFormat(wantedResolution.Width,
wantedResolution.Height);
// フォーマットを ComboBox に追加
// formatlist.Add(tmpformat.ToString());
comboBoxFormat.Items.Add(tmpformat);
}
}
}
// 利用可能なフレームレートを列挙
foreach (var framerate in icImagingControl1.DeviceFrameRates)
{
comboBoxFramerate.Items.Add(framerate);
}
// 既定のフォーマットとフレームレートを設定してライブ開始
icImagingControl1.VideoFormat = icImagingControl1.VideoFormats[0];
icImagingControl1.DeviceFrameRate =
(float)comboBoxFramerate.Items[0];
icImagingControl1.LiveStart();
}
フォームが読み込まれると、まずicImagingControl1.Deviceにカメラ名(文字列)を代入して使用するデバイスを確定します。次にVideoFormatDescsに格納された各フォーマットを一つずつ取り出し、あらかじめ用意しておいた「利用したい解像度の一覧」と照合しながら、カメラが実際に扱えるサイズだけを選別します。VideoFormatは解像度だけでなく、RGB24やYUY2、Mono8などのピクセルフォーマットも同時に保持しています。ピクセルフォーマットは画素の並び方やビット深度を決める要素で、たとえば「24ビットRGBでカラーを受け取るか」「8ビットモノクロで処理するか」といった違いをここで指定できます。
幅と高さが有効かどうかはIsValidSizeで確認し、条件を満たした場合にCreateVideoFormatを呼び出して、解像度とピクセルフォーマットを併せ持つVideoFormatオブジェクトを生成し、解像度選択用コンボボックスへ追加します。このとき、ビニングやスキッピングされた解像度も候補に含めることが可能です。ピクセルフォーマットの詳細や各フォーマットの画素配置については、以下のドキュメントを参照してください。
イメージバッファにアクセスする
IC Imaging Control_Ver3.5(C#/VB.NET) サンプルプログラム
解像度リストには640×480から5320×4600まで幅広いサイズが用意されていますが、ここへ独自のROI(撮りたい範囲)を追加しておくことで、任意の切り出し解像度も選択できます。フレームレート用コンボボックスも同じタイミングで初期化され、DeviceFrameRatesプロパティから取得した値をそのまま追加します。最後にVideoFormats[0]とDeviceFrameRatesの先頭要素を既定値として選択し、LiveStart()を呼び出してライブ映像を開始します。
カラーフォーマット選択時の処理
private void comboBoxFormat_SelectedIndexChanged(object sender, EventArgs e)
{
icImagingControl1.LiveStop();
// 選択されたフォーマットを適用
icImagingControl1.VideoFormat =
comboBoxFormat.Items[comboBoxFormat.SelectedIndex] as VideoFormat;
// フレームレート一覧を更新
comboBoxFramerate.Items.Clear();
foreach (var framerate in icImagingControl1.DeviceFrameRates)
{
comboBoxFramerate.Items.Add(framerate);
}
if (comboBoxFramerate.Items.Count > 0)
comboBoxFramerate.SelectedIndex = 0;
icImagingControl1.LiveStart();
}
フォーマット選択が変わったときに実行されるこのイベントハンドラは、LiveStop()を呼び、ストリームを完全に停止してから コンボボックスで選択したVideoFormatに差し替えています。次に選択したVideoFormatで利用できるフレームレートをDeviceFrameRatesから取り直して、フレームレートのコンボボックスのリストを更新します。最後にLiveStart()を呼んでストリームを再開しています。
フレームレート選択時の処理
private void comboBoxFramerate_SelectedIndexChanged(object sender, EventArgs e)
{
icImagingControl1.LiveStop();
icImagingControl1.DeviceFrameRate =
(float)comboBoxFramerate.Items[comboBoxFramerate.SelectedIndex];
icImagingControl1.LiveStart();
}
フレームレート変更時の処理もフォーマット変更とほぼ同じ流れです。LiveStop()で映像を止めたあと、DeviceFrameRateに選択された値を代入し、LiveStart()で再開します。