VCDプロパティ:ストロボアウト編
概要
VCDプロパティ機能のストロボアウトの実装方法について説明します。VCDプロパティの設定方法については下記をご覧ください。
VCDプロパティの設定方法
IC Imaging Control_Ver3.4(C#/VB.NET) サンプルプログラム
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | Strobe_cs_3.5.zip |
サンプル(VB.NET) | Strobe_vb_3.5.zip ※strobeモードを有効化のみの実装です。 |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。
[strobe]チェックボックス | strobeモードを有効化・無効化します。 |
---|---|
[Polarity]チェックボックス | 極性(Polarity)を変更します。 |
[Mode]リストボックス | constant,fixed duration,exposureモードのいずれかに設定します。 |
[storobeDuration]スライダー | Modeリストボックスにて「fixed duration」に設定した時に反映するストロボアウトの時間(μs) |
[storobeDelay]スライダー | ストロボアウトを遅延させる時間(μs) |
VCDプロパティの宣言
private TIS.Imaging.VCDSwitchProperty _strobeEnable;
private TIS.Imaging.VCDMapStringsProperty _strobeMode;
private TIS.Imaging.VCDSwitchProperty _strobePolarity;
private TIS.Imaging.VCDRangeProperty _strobeDuration;
private TIS.Imaging.VCDRangeProperty _strobeDelay;
Private strobeEnable As TIS.Imaging.VCDSwitchProperty
Private strobeMode As TIS.Imaging.VCDSwitchProperty
Private strobePolarity As TIS.Imaging.VCDSwitchProperty
Private strobeDuration As TIS.Imaging.VCDSwitchProperty
Private strobeDelay As TIS.Imaging.VCDSwitchProperty
プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があり、VCDGUIDsと呼ばれるプロパティを特定するための識別子を使います。VCDGUIDsの中にはElement、Interface、Property Itemが含まれています。
スライダーやチェックボックスで操作しやすくするためにSwitch、Range、MapStringsのインターフェイスをグローバルオブジェクトとして宣言します。
その他のインターフェースの一覧は下記にありますので、他のインターフェースを使用する場合にはご確認ください。
初期設定
private void Form1_Load( object sender, EventArgs e )
{
if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
{
MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
//カメラから出力された映像をIC Imaging Contorolのコントロール表示サイズにする
icImagingControl1.LiveDisplayDefault = false;
icImagingControl1.LiveDisplaySize = icImagingControl1.Size;
// strobeEnableの初期化
_strobeEnable = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_Value );
if ( _strobeEnable == null )
{
chkStrobe.Enabled = false;
liststrobeMode.Enabled = false;
chkstrobePolarity.Enabled = false;
sldstrobeDuration.Enabled = false;
sldstrobeDelay.Enabled = false;
}
else
{
chkStrobe.Enabled = true;
}
_strobeMode = icImagingControl1.VCDPropertyItems.Find<VCDMapStringsProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeMode);
//Modeリストボックスの初期化
if (_strobeMode == null)
{
liststrobeMode.Enabled = false;
}
else
{
int index = 0;
foreach (string Item in _strobeMode.Strings)
{
liststrobeMode.Items.Add(Item);
if (_strobeMode.String == Item.ToString()) liststrobeMode.SelectedIndex= index;
index++;
}
}
//Polarityの設定の初期化
_strobePolarity = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobePolarity);
if (_strobePolarity == null)
{
chkstrobePolarity.Enabled = false;
}
else
{
chkstrobePolarity.Enabled = true;
if (_strobePolarity.Switch == true)
{
chkstrobePolarity.CheckState = CheckState.Checked;
}
else
{
chkstrobePolarity.CheckState = CheckState.Unchecked;
}
}
//Durationの設定の初期化
_strobeDuration = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeDuration);
if (_strobeDuration == null)
{
sldstrobeDuration.Enabled = false;
}
else
{
sldstrobeDuration.Enabled = true;
sldstrobeDuration.Minimum = _strobeDuration.RangeMin;
sldstrobeDuration.Maximum = _strobeDuration.RangeMax;
if (_strobeDuration.RangeMin> _strobeDuration.Value)
{
sldstrobeDuration.Value = _strobeDuration.RangeMin;
}
else if (_strobeDuration.RangeMax < _strobeDuration.Value)
{
sldstrobeDuration.Value = _strobeDuration.RangeMax;
}
else
{
sldstrobeDuration.Value = _strobeDuration.Value;
}
textDuration.Text = sldstrobeDuration.Value.ToString();
}
//Delayの設定の初期化
_strobeDelay = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeDelay);
if (_strobeDelay == null)
{
sldstrobeDelay.Enabled = false;
}
else
{
sldstrobeDelay.Enabled = true;
//
sldstrobeDelay.Minimum = _strobeDelay.RangeMin;
sldstrobeDelay.Maximum = _strobeDelay.RangeMax;
if (_strobeDelay.RangeMin > _strobeDelay.Value)
{
sldstrobeDelay.Value = _strobeDelay.RangeMin;
}
else if (_strobeDelay.RangeMax < _strobeDelay.Value)
{
sldstrobeDelay.Value = _strobeDelay.RangeMax;
}
else
{
sldstrobeDelay.Value = _strobeDelay.Value;
}
textDelay.Text = sldstrobeDelay.Value.ToString();
}
//ストロボアウトのコントロールの有効化
if (_strobeEnable.Switch == true)
{
chkStrobe.CheckState = CheckState.Checked;
if (_strobeMode != null) liststrobeMode.Enabled = true;
if (_strobePolarity != null) chkstrobePolarity.Enabled = true;
if (_strobeDuration != null) sldstrobeDuration.Enabled = true;
if (_strobeDelay != null) sldstrobeDelay.Enabled = true;
}
else
{
chkStrobe.CheckState = CheckState.Unchecked;
liststrobeMode.Enabled = false;
chkstrobePolarity.Enabled = false;
sldstrobeDuration.Enabled = false;
sldstrobeDelay.Enabled = false;
}
// ライブストリーミング開始
icImagingControl1.LiveStart();
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IcImagingControl1.DeviceValid Then
IcImagingControl1.ShowDeviceSettingsDialog()
If Not IcImagingControl1.DeviceValid Then
MsgBox("No device was selected.", MsgBoxStyle.Information, "Strobe")
Me.Close()
Exit Sub
End If
End If
'カメラから出力された映像をIC Imaging Contorolのコントロール表示サイズにする
IcImagingControl1.LiveDisplayDefault = False
IcImagingControl1.LiveDisplaySize = IcImagingControl1.Size
' strobeEnableの初期化
strobeEnable = IcImagingControl1.VCDPropertyItems.FindInterface(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_Value, VCDGUIDs.VCDInterface_Switch)
If Not strobeEnable Is Nothing Then
chkStrobe.Enabled = True
chkStrobe.CheckState = strobeEnable.Switch
Else
chkStrobe.Enabled = False
System.Windows.Forms.MessageBox.Show("Strobe property is not available.", Me.Text, System.Windows.Forms.MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
' ライブストリーミング開始
IcImagingControl1.LiveStart()
End Sub
デバイスを選択後、VCDPropertyItems.Findメソッドを使って下記のitem識別子とelement識別子を引数に割り当てることによりVCDPropertyInterfaceを取得できます。
コントローラ | グローバルオブジェクト | item識別子 | element識別子 | インターフェース |
---|---|---|---|---|
[strobe] チェックボックス |
_strobeEnable | VCDID_Strobe | VCDElement_Value | VCDSwitchProperty |
[Polarity] チェックボックス |
_strobeEnable | VCDID_Strobe | VCDElement_StrobePolarity | VCDSwitchProperty |
[Mode] リストボックス |
_strobeMode | VCDID_Strobe | VCDElement_StrobeMode | VCDMapStringsProperty |
[storobeDuration] スライダー |
_strobeDuration | VCDID_Strobe | VCDElement_StrobeDuration | VCDRangeProperty |
[storobeDelay] スライダー |
_strobeDelay | VCDID_Strobe | VCDElement_StrobeDelay | VCDRangeProperty |
item識別子は下記をご覧ください。
element識別子は下記をご覧ください
[storobe]チェックボックスの処理
private void chkStrobe_CheckedChanged( object sender, EventArgs e )
{
if( chkStrobe.CheckState == CheckState.Checked )
{
_strobeEnable.Switch = true;
if (_strobeMode != null) liststrobeMode.Enabled = true;
if (_strobePolarity != null) chkstrobePolarity.Enabled = true;
if (_strobeDuration != null) sldstrobeDuration.Enabled = true;
if (_strobeDelay != null) sldstrobeDelay.Enabled = true;
}
else
{
_strobeEnable.Switch = false;
liststrobeMode.Enabled = false;
chkstrobePolarity.Enabled = false;
sldstrobeDuration.Enabled = false;
sldstrobeDelay.Enabled = false;
}
}
Private Sub chkStrobe_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStrobe.CheckedChanged
strobeEnable.Switch = chkStrobe.Checked
End Sub
[storobe]チェックボックスでチェックボックスが有効化されます。ユーザーがストロボチェックボックスをクリックすると、ストロボアウトが有効または無効になります。
[Polarity]チェックボックスの処理
private void strobePolarity_CheckedChanged(object sender, EventArgs e)
{
if (chkStrobe.CheckState == CheckState.Checked)
{
_strobePolarity.Switch = true;
}
else
{
_strobePolarity.Switch = false;
}
}
ユーザーがストロボチェックボックスをクリックすると、ストロボアウトの極性を変更します。
[Mode]リストボックスの処理
private void liststrobeMode_SelectedIndexChanged(object sender, EventArgs e)
{
Object selectedItem = liststrobeMode.SelectedItem;
_strobeMode.String = selectedItem.ToString();
}
Modeリストで選択したモードに設定します。
それぞれのモードは下記の通りです。
constant | 出力期間:一定 (露光時間関係なし) Enableの場合は常にストロボアウト出力するという設定となっています。 |
---|---|
fixed duratio | 出力期間:Durationで設定した期間だけストロボアウト出力します。 露光開始したタイミングで一定時間ストロボアウするときに使用します。 |
exposure | 出力期間:露光している期間だけストロボアウト出力します。 |
[storobeDuration]スライダーの処理
private void sldstrobeDuration_Scroll(object sender, EventArgs e)
{
_strobeDuration.Value = (sldstrobeDuration.Value);
textDuration.Text = sldstrobeDuration.Value.ToString();
}
[Mode]リストボックスでStrobe Mode(fixed duration)を選択したストロボアウトのDuration時間を設定します。
Strobe Durationはあくまで出力できる期間の指定となっており、Strobe Modeがfixed durationの時にのみ使用することができます。
Constantやexposureモードでは使用することができません。
Durationで設定した時間の間ストロボアウトし続けます。
例えば、設定時間が100の場合は、100µs(0.1ms)の時間ストロボアウトすることになります。
[storobeDelay]スライダーの処理
private void sldstrobeDelay_Scroll(object sender, EventArgs e)
{
_strobeDelay.Value = (sldstrobeDelay.Value);
textDelay.Text = sldstrobeDelay.Value.ToString();
}
ストロボアウトする遅延時間の設定です。設定時間が100の場合は、100µs(0.1ms)の時間後にストロボアウトすることになります。
VCDプロパティの使用方法は下記のAPIリファレンスマニュアルにもその他関数などの説明があります。
VCDプロパティ:露光とゲイン編
IC Imaging Control Ver3.5(C#/VB.NET) サンプルプログラム