デバイス設定ダイアログの作成
概要
PCに接続したデバイスを設定するためのダイアログ画面のコーディング方法について説明します。
IC Imaging ControlではShowDeviceSettingsDialogメソッドが用意されています。
下記の1行のコーディングだけで下図のデバイスダイアログ画面を呼び出すことができます。
// ダイアログを表示させる
ICImagingControl1.ShowDeviceSettingsDialog();
デバイスの設定からプロパティの変更まで行えるダイアログ画面が呼び出されますが、ここではこのダイアログ画面をカスタマイズする方法について説明します。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | making_device_settings_cs_3.5.zip |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
[Making Device Setting]フォーム
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。
[Device]ボタン | [Custom Device Settings Dialog]画面を開きます。 |
---|---|
[Start Live]ボタン | ライブストリームを開始します。 |
[Stop Live]ボタン | ライブストリームを停止します。 |
icImagingControl1のライブストリームを開始、ライブストリームを停止、Custom Device Settings Dialog画面を開く、いずれか3種類の動作となります。[Device]ボタンをクリックした時cmdDevice_Clickイベントの時で違うフォームでicImagingControlを制御するためにicImagingControlのオブジェクトを引き渡す必要があります。
//フォームをクリックした時
private void Form1_Load( object sender, System.EventArgs e )
{
cmdStartLive.Enabled = icImagingControl1.DeviceValid;
cmdStopLive.Enabled = false;
cmdDevice.Enabled = true;
icImagingControl1.LiveDisplayDefault = false;
icImagingControl1.LiveDisplaySize = icImagingControl1.Size;
}
//Deviceボタンをクリックした時
private void cmdDevice_Click( object sender, System.EventArgs e )
{
using( frmDeviceSettings DeviceDialog = new frmDeviceSettings( icImagingControl1 ) )
{
DeviceDialog.ShowDialog();
}
cmdStartLive.Enabled = true;
cmdStopLive.Enabled = false;
cmdDevice.Enabled = false;
}
//Start Liveボタンをクリックした時
private void cmdStartLive_Click( object sender, System.EventArgs e )
{
try
{
icImagingControl1.LiveStart();
cmdStartLive.Enabled = false;
cmdStopLive.Enabled = true;
cmdDevice.Enabled = false;
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
//Stop Liveボタンをクリックした時
private void cmdStopLive_Click( object sender, System.EventArgs e )
{
try
{
icImagingControl1.LiveStop();
cmdStartLive.Enabled = true;
cmdStopLive.Enabled = false;
cmdDevice.Enabled = true;
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
[Custom Device Settings Dialog]フォーム
[Device]リストボックス | 接続されたデバイスを一覧で表示します。 |
---|---|
[Video Norm]リストボックス | 選択中のデバイスで対応するビデオ規格の一覧を返します (DFG/USB2proなどのコンバータに対応) |
[Video Format]リストボックス | 解像度一覧を表示します。 |
[Frame Rate]リストボックス | 選択できるフレームレート一覧を表示します。 |
[Input Channel]リストボックス | 画像取り込みデバイスの入力チャンネルを返します。 (DFG/USB2proなどのコンバータに対応) |
[Serial Number]テキストボックス | 接続されたデバイスのシリアル番号を表示します。(書き込み不可) |
[Flip Vertical]チェックボックス | ライブ画像の垂直反転を返す、または設定します。 |
[Flip horizontal]チェックボックス | ライブ画像の水平反転を返す、または設定します。 |
[OK]ボタン | 設定した内容を反映し[Custom Device Settings Dialog]フォームを閉じます。 |
[Cancel]ボタン | 設定した内容を反映せずに[Custom Device Settings Dialog]フォームを閉じます。 |
[Custom Device Settings Dialog]フォーム起動時の処理
private TIS.Imaging.ICImagingControl imagingControl;
private string deviceState;
Making Device Settingフォームから引き継いだimagingControlオブジェクトを制御するためにMaking Device Settingフォームのクラス内で制御するためにグローバル変数として下記のように定義する必要があります。
その後、コンストラクタにてMaking Device Settingフォームから引き継いだICImagingControlオブジェクトをグローバル変数imagingControlに代入します。これでCustom Device Settings DialogフォームにてMaking Device SettingフォームのICImagingControlオブジェクトを制御できるようになります。
public frmDeviceSettings( TIS.Imaging.ICImagingControl ic )
{
imagingControl = ic;
InitializeComponent();
}
private void frmDeviceSettings_Load( object sender, EventArgs e )
{
if( imagingControl.DeviceValid )
{
if( imagingControl.LiveVideoRunning )
{
lblErrorMessage.Text = "The device settings dialog is not available while the live video is running.\n\nStop the live video first.";
lblErrorMessage.AutoSize = false;
lblErrorMessage.Padding = new Padding( 8 );
lblErrorMessage.SetBounds( 0, 0, 100, cmdOK.Top );
lblErrorMessage.Dock = DockStyle.Top;
lblErrorMessage.Visible = true;
return;
}
else
{
lblErrorMessage.Visible = false;
}
}
//デバイスの状態を保持
SaveDeviceSettings();
UpdateDevices();
}
frmDeviceSettingsがロードされたタイミングでデバイスの状態を確認します。
デバイス設定はライブストリーミングが停止した状態で設定しなければならないのでライブストリーミングがしたままの時にはラベルにライブ表示を停止するように表示をしています。
//デバイスの状態を保持
private void SaveDeviceSettings()
{
deviceState = imagingControl.DeviceState;
}
SaveDeviceSettings関数にて"imagingControl.DeviceState"で現状のデバイス情報をグローバル変数deviceStateに保持するようにします。
private void UpdateDevices()
{
cboDevice.Items.Clear();
if( imagingControl.Devices.Length > 0 )
{
foreach( object Item in imagingControl.Devices )
{
cboDevice.Items.Add( Item.ToString() );
}
if( imagingControl.DeviceValid )
{
cboDevice.SelectedItem = imagingControl.Device;
}
else
{
cboDevice.SelectedIndex = 0;
}
cboDevice.Enabled = true;
}
else
{
cboDevice.Items.Add( not_available_text );
cboDevice.Enabled = false;
cboDevice.SelectedIndex = 0;
}
}
UpdateDevicesではDeviceリストボックスで使用できるデバイス一覧をリストに追加するようにしています。
private void cboDevice_SelectedIndexChanged( object sender, System.EventArgs e )
{
try
{
// Open the device
if( cboDevice.Enabled )
{
imagingControl.Device = cboDevice.Text;
string serial;
if( imagingControl.DeviceCurrent.GetSerialNumber(out serial) )
{
txtSerial.Text = serial;
}
else
{
txtSerial.Text = not_available_text;
}
}
// ビデオ規格に対応している機種かどうか確認(アナログコンバータなど)
UpdateVideoNorms();
UpdateInputChannels();
UpdateFlip();
}
catch( Exception ex )
{
MessageBox.Show( ex.Message );
}
}
[Device]リストボックスで選択することで下記のコントローラをそれぞれ更新するようにしています。
- [Video Norm]リストボックス
- [Video Format]リストボックス
- [Frame Rate]リストボックス
- [Input Channel]リストボックス
- [Serial Number]テキストボックス
- [Flip Vertical]チェックボックス
- [Flip horizontal]チェックボックス
//ビデオ規格の適用(String型)
imagingControl.VideoNorm = cboVideoNorm.Text;
//解像度を適用(String型)
imagingControl.VideoFormat = cboVideoFormat.Text;
//フレームレートの設定(Float型)
imagingControl.DeviceFrameRate = (float)( System.Convert.ToDouble( cboFrameRate.Text ) );
//画像取り込みデバイスの入力チャンネルをを設定(String型)
imagingControl.InputChannel = cboInputChannel.Text;
//Serial Numberテキストボックス取得
imagingControl.DeviceCurrent.GetSerialNumber(out serial) //シリアル番号取得
txtSerial.Text = serial;
//ライブ画像の垂直反転を設定(Boolean型)
imagingControl.DeviceFlipVertical = ( chkFlipV.Checked == true );
//ライブ画像の水平反転を設定(Boolean型)
imagingControl.DeviceFlipHorizontal = ( chkFlipH.Checked == true );
Deviceリストボックスで選択したデバイスにVideo Formatやフレームレートを適用するのは下記の通りとなっております。
プロパティによってはString型、Float型、Boolean型だったりするので注意が必要です。
下記のAPIリファレンスマニュアルにもその他関数などの説明があります。
プログラマーズガイド:デバイス設定ダイアログの作成
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル