VCDプロパティ:露光とゲイン編
概要
IC Imaging ControlではTheImagingSource社のデバイスの機能にアクセスするためにVCDプロパティと呼ばれるクラスを用意しています。
ここではVCDプロパティの簡単な例として露光時間とゲインの実装方法について説明します。
VCDpropertyの設定方法については下記をご覧ください。
VCDpropertyの設定方法
IC Imaging Control Ver3.4(C#/VB.NET) サンプルプログラム
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | standard_properties_cs_3.5.zip |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。
[Exposure]スライダー | 露光時間を設定します。 |
---|---|
[Exposure]チェックボックス | 自動露光時間の機能を有効化/無効化します。 |
[Gain]スライダー | ゲインを設定します。 |
[Gain]チェックボックス | ゲインの機能を有効化/無効化します。 |
VCDプロパティの宣言
private TIS.Imaging.VCDAbsoluteValueProperty _exposureValue;
private TIS.Imaging.VCDSwitchProperty _exposureAuto;
private TIS.Imaging.VCDAbsoluteValueProperty _gainValue;
private TIS.Imaging.VCDSwitchProperty _gainAuto;
プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があり、VCDGUIDsと呼ばれるプロパティを特定するための識別子を使います。VCDGUIDsの中にはElement、Interface、Property Itemが含まれています。
スライダーやチェックボックスで操作しやすくするためにSwitch、AbsoluteValueのインターフェイスをグローバルオブジェクトとして宣言します。
インターフェースの一覧は下記にありますので詳細は下記をご確認ください。
初期設定
private void Form1_Load( object sender, EventArgs e )
{
trackBarExposure.Enabled = false;
checkBoxExposure.Enabled = false;
trackBarGain.Enabled = false;
checkBoxGain.Enabled = false;
if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
{
MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
InitProperties();
icImagingControl1.LiveStart();
}
フォームを起動した時に自動露光時間、自動ゲインをオフにしデバイスダイアログを表示します。
private void InitProperties()
{
_exposureValue = icImagingControl1.VCDPropertyItems.Find<VCDAbsoluteValueProperty>(VCDGUIDs.VCDID_Exposure, VCDGUIDs.VCDElement_Value);
_exposureAuto = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Exposure, VCDGUIDs.VCDElement_Auto);
_gainValue = icImagingControl1.VCDPropertyItems.Find<VCDAbsoluteValueProperty>(VCDGUIDs.VCDID_Gain, VCDGUIDs.VCDElement_Value);
_gainAuto = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Gain, VCDGUIDs.VCDElement_Auto);
if( _exposureValue != null )
{
trackBarExposure.Enabled = _exposureValue.Available && !_exposureValue.ReadOnly;
trackBarExposure.Minimum = 0;
trackBarExposure.Maximum = 100;
trackBarExposure.Value = AbsoluteValueSliderHelper.AbsValToSliderPosLogarithmic(_exposureValue, _exposureValue.Value, 100);
}
if( _exposureAuto != null )
{
checkBoxExposure.Enabled = !_exposureAuto.ReadOnly;
checkBoxExposure.Checked = _exposureAuto.Switch;
}
if( _gainValue != null )
{
trackBarGain.Enabled = _gainValue.Available && !_gainValue.ReadOnly;
trackBarGain.Minimum = 0;
trackBarGain.Maximum = 100;
trackBarGain.Value = AbsoluteValueSliderHelper.AbsValToSliderPosLinear(_gainValue, _gainValue.Value, 100);
}
if( _gainAuto != null )
{
checkBoxGain.Enabled = !_gainAuto.ReadOnly;
checkBoxGain.Checked = _gainAuto.Switch;
}
}
デバイスを選択後、露光時間とゲインを設定するために冒頭で宣言したSwitch、AbsoluteValueのグローバルオブジェクトに適切なプロパティを割り当てます。
VCDPropertyItems.Findメソッドを使ってitem識別子とelement識別子を引数に割り当てることによりVCDPropertyInterfaceを取得できます。
_exposureValue = icImagingControl1.VCDPropertyItems.Find<VCDAbsoluteValueProperty>(VCDGUIDs.VCDID_Exposure, VCDGUIDs.VCDElement_Value);
例えば、上記の場合element識別子はVCDElement_Value、item識別子はVCDID_Exposureとなります。 なお、その他のelement識別子は下記をご覧ください。
item識別子は下記をご覧ください。
IC Imaging Control3.5からVCDIDクラスのVCDPropertyItems.FindItemは非推奨となっていますのでご注意ください。
インターフェースを割り当てれば冒頭で宣言したインターフェースクラスのプロパティを操作することで値を変えることができます。
[Exposure]チェックボックスをチェックした時の処理
private void CheckBoxExposure_CheckedChanged( object sender, EventArgs e )
{
_exposureAuto.Switch = checkBoxExposure.Checked;
trackBarExposure.Enabled = _exposureValue != null && _exposureValue.Available && !_exposureValue.ReadOnly;
}
[Exposure]スライダーをスクロールした時の処理
private void TrackBarExposure_Scroll( object sender, EventArgs e )
{
_exposureValue.Value = AbsoluteValueSliderHelper.SliderPosToAbsValLogarithmic( _exposureValue, trackBarExposure.Value, 100 );
}
[Gain]チェックボックスをチェックした時の処理
private void CheckBoxGain_CheckedChanged( object sender, EventArgs e )
{
_gainAuto.Switch = checkBoxGain.Checked;
trackBarGain.Enabled = _gainValue != null && _gainValue.Available && !_gainValue.ReadOnly;
}
[Gain]スライダーをスクロールした時の処理
private void TrackBarGain_Scroll( object sender, EventArgs e )
{
_gainValue.Value = AbsoluteValueSliderHelper.SliderPosToAbsValLinear(_gainValue, trackBarGain.Value, 100);
}
下記のAPIリファレンスマニュアルにもその他関数などの説明があります。
技術関連項目:VCDプロパティ
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル