デバイスプロパティ設定の保存と復元
概要
ICImagingControlでデバイスのプロパティをファイルに保存、復元する方法を示しています。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | save_restore_properties_cs_3.5.zip |
プログラム内で取得できるXmlファイル | device_sample.xml |
サンプルツールの外観
private void btnSaveSettings_Click(object sender, System.EventArgs e)
{
if( icImagingControl1.DeviceValid )
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.AddExtension = true;
dlg.DefaultExt = "xml";
dlg.Filter = "Configuration Files (*.xml)|*.xml||";
dlg.OverwritePrompt = true;
dlg.RestoreDirectory = true;
dlg.Title = "Save Settings";
if( dlg.ShowDialog() == DialogResult.OK )
{
icImagingControl1.SaveDeviceStateToFile( dlg.FileName );
}
}
}
ICImagingControlにはビデオキャプチャデバイスの現在のプロパティ値をファイルとして保存する方法と、その保存されたファイルからデバイス設定を復元する方法が用意されています。
以下の関数を使用します。
SaveDeviceStateToFile
LoadDeviceStateFromFile
[Device...]ボタンをクリックするとビデオキャプチャデバイス選択のダイアログが開きます。 [Properties...]ボタンをクリックすることで選択されたデバイスのプロパティ設定ウィンドウを開きます。
[Save Settings...]ボタンがクリックされると、プログラムはまずビデオキャプチャデバイスが有効かどうかを.DeviceValidによりチェックします。その後、CommonDialog1.ShowSave関数にてファイルをセーブするダイアログウィンドウを開きます。.SaveDeviceStateToFileをコールすることで、指定されたファイルに現在のパラメータを書き込みます。
private void btnRestoreSettings_Click(object sender, System.EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Configuration Files (*.xml)|*.xml||";
dlg.RestoreDirectory = true;
dlg.Title = "Restore Settings";
if( dlg.ShowDialog() == DialogResult.OK )
{
try
{
// デバイスが動作中であれば停止します。
if (icImagingControl1.LiveVideoRunning)
icImagingControl1.LiveStop();
// コンフィギュレーションファイルを Load します。
icImagingControl1.LoadDeviceStateFromFile(dlg.FileName, true);
// ライブビデオを再開します。
icImagingControl1.LiveStart();
}
catch( TIS.Imaging.ICException ex)
{
MessageBox.Show(ex.Message,"Failed to Open Device",MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
[Restore Settings...]がクリックされると、プログラムは現在のイメージデータストリームを停止します(.LiveStop)。次にCommonDialog1.ShowOpenによりファイル選択のダイアログウィンドウを開きます。.LoadDeviceStateFromFileのコールにより、ICImagingControlは選択されたファイルからパラメータデータを取得し、現在開かれているデバイスに設定値を割り当てるようとします。
もし.LoadDeviceStateFromFileが失敗すると、例外エラーが出力されます。
そのため、.LoadDeviceStateFromFileはtry ... catchブロック内で使用するようにします。
ICCaptureでも同じように、デバイスプロパティ等の設定値をiccfファイル(構成ファイル)としてローカルに保存する事ができますが、iccfファイルはICCapture上の画面設定情報が含まれるのでLoadDeviceStateFromFileで開くことはできません。iccfファイルはICCaptureで前回の設定情報を復活させるための実行ファイルです。
最後に.LiveStartをコールして、新しいパラメータに設定されたイメージストリームを再開します。
別のシリアル番号のカメラをLoadDeviceStateFromFileを使って開く事ができます。 SaveDeviceStateToFileで保存するxmlファイルには、本来はシリアル番号も含んでいるので、 別のシリアル番号のデバイスをLoadDeviceStateFromFileで読み込むとエラーが起きます。 そこで、下記のようにxmlファイルのdevice要素内にあるunique_nameを消すことで LoadDeviceStateFromFileを使って任意のシリアル番号のカメラを開くことができます。
例:device_sample.xml
<device_state libver="3.5" filemajor="1" fileminor="0">
<device name="DFK 33UX183" base_name="DFK 33UX183" unique_name="DFK 33UX183 26220222">
例:device_sample.xml(unique_nameを消去)
<device_state libver="3.5" filemajor="1" fileminor="0">
<device name="DFK 33UX183" base_name="DFK 33UX183">