明るさの調整
概要
このサンプルではVCDプロパティの制御方法について説明します。
例として"Brightness" プロパティを使ってどのようにしてVCDプロパティを制御するのかを説明します。明るさのインターフェースを取得し、最大値、最小値、現在設定値、自動設定のオンオフのそれぞれの機能に「スライダー」や「チェックボックス」のコントローラーを割り当てて、Windows Form内で設定することで簡単にカメラのプロパティの制御が可能です。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | BrightnessProperty_cs.zip |
実行結果
[Brightness]スライダー | 明るさを設定 |
---|---|
[Auto]チェックボタン | 明るさの自動設定をオンオフを切り替える |
グローバル変数の宣言
private TIS.Imaging.VCDRangeProperty _brightnessRange;
private TIS.Imaging.VCDSwitchProperty _brightnessSwitch;
//その他の例
private TIS.Imaging.VCDRangeProperty GainRange;
private TIS.Imaging.VCDSwitchProperty GainSwitch;
private TIS.Imaging.VCDAbsoluteValueProperty GainValue;
private TIS.Imaging.VCDMapStringsProperty WhiteBalancMapStrings;
private TIS.Imaging.VCDButtonProperty SoftwareTrigger;
Dim BrightnessProperty As VCDRangeProperty
値と自動設定のインターフェースとなるグローバル変数を宣言してください。
プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があります。Switch、Range、AbsoluteValue、Button、MapStringのどの型なのかを確認し、それぞれに対応した呼び出し方、また関連するユーザーコントロールを初期化するためにそれらインターフェースの現在の状態を取得します。
Form Loadでインターフェース割り当てとコントロール初期化
private void Form1_Load( object sender, EventArgs e )
{
//スライダーとチェックボタンを無効化
sldBrightness.Enabled = false;
chkBrightnessAuto.Enabled = false;
//有効なビデオキャプチャデバイスが選択されているかどうかを確認
if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
{
MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
//インタフェース割り当て(後述にて説明)
InitBrightnessItem();
if (_brightnessRange != null){
//BrightnessRangeオブジェクトの現在の範囲と値でスライダーを初期化します
sldBrightness.Enabled = true;
sldBrightness.Minimum = _brightnessRange.RangeMin;
sldBrightness.Maximum = _brightnessRange.RangeMax;
sldBrightness.Value = _brightnessRange.Value;
// BrightnessSwitchオブジェクトの初期化
if( _brightnessSwitch != null )
{
chkBrightnessAuto.Enabled = true;
sldBrightness.Enabled = !_brightnessSwitch.Switch;
chkBrightnessAuto.Checked = _brightnessSwitch.Switch;
}
// ライブストリーム開始
icImagingControl1.LiveStart();
}
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IcImagingControl1.ShowDeviceSettingsDialog = DialogResult.OK Then
IcImagingControl1.LiveStart()
BrightnessProperty = IcImagingControl1.VCDPropertyItems.FindInterface(VCDGUIDs.VCDID_Brightness, VCDGUIDs.VCDElement_Value, VCDGUIDs.VCDInterface_Range)
If Not BrightnessProperty Is Nothing Then
'BrightnessRangeオブジェクトの現在の範囲と値でスライダーを初期化します
trackBar1.Minimum = BrightnessProperty.RangeMin
trackBar1.Maximum = BrightnessProperty.RangeMax
'BrightnessSwitchオブジェクトの初期化
trackBar1.Value = BrightnessProperty.Value
Else
System.Windows.Forms.MessageBox.Show("Brightness property is not available.", Me.Text, System.Windows.Forms.MessageBoxButtons.OK, MessageBoxIcon.Information)
trackBar1.Enabled = False
End If
Else
System.Windows.Forms.MessageBox.Show("No device was selected.", Me.Text, System.Windows.Forms.MessageBoxButtons.OK, MessageBoxIcon.Information)
Me.Close()
End If
End Sub
プロパティの調整をするのにはインターフェースが使われ、プロパティ項目のエレメントより取得することが可能です。 Form Loadのイベントの段階でInitBrightnessItemを呼び出し、BrightnessSwitchとBrightnessRangeのグローバル変数にVCDプロパティを割り当てます。その後、スライダーとチェックボックスを初期化しそれぞれのコントローラーで扱えるようにしています。
グローバル変数にインタフェースを割り当てる
private void InitBrightnessItem()
{
//VCDPropertyItemsコレクションで明るさのプロパティをFindItemで取得
//明るさが現在のビデオキャプチャデバイスでサポートされていない場合、例外がスローされます。
TIS.Imaging.VCDPropertyItem brightness = icImagingControl1.VCDPropertyItems.FindItem( TIS.Imaging.VCDGUIDs.VCDID_Brightness );
//>>
if( brightness != null )
{
// brightnessRangeオブジェクトを使ってスライダーを初期化します
_brightnessRange = brightness.Find&glt;TIS.Imaging.VCDRangeProperty>( TIS.Imaging.VCDGUIDs.VCDElement_Value );
// brightnessSwitchオブジェクトを使ってスイッチボックスを初期化します
_brightnessSwitch = brightness.Findglt;TIS.Imaging.VCDSwitchProperty>( TIS.Imaging.VCDGUIDs.VCDElement_Auto );
//カメラの機能に明るさ自動調整機能がない場合にはエラーメッセージ
if( _brightnessSwitch == null )
{
MessageBox.Show( "Automation of brightness is not supported by the current device!" );
}
//>>
}
// 明るさのプロパティにアクセスできなかった時にはエラーメッセージを表示
if( brightness == null )
{
MessageBox.Show( "Brightness property is not supported by the current device!" );
}
}
VCDPropertyItemを宣言し、VCDPropertyItems.FindItemメソッドを使って”Brightness”のインタフェースを宣言します。
明るさVCDPropertyItemを取得し、BrightnessSwitchとBrightnessRangeを割り当てます。
プロパティが存在しなかったり、カメラに明るさ自動設定がない場合にはエラーメッセージが表示されるようにしています。
コントローラーのイベントハンドラーに設定する
//チェックボックスにチェックを入れた時に発火するイベント
private void chkBrightnessAuto_CheckedChanged( object sender, EventArgs e )
{
_brightnessSwitch.Switch = chkBrightnessAuto.Checked;
sldBrightness.Enabled = !chkBrightnessAuto.Checked;
}
//スライダーを変更した時に発火するイベント
private void sldBrightness_Scroll( object sender, EventArgs e )
{
_brightnessRange.Value = sldBrightness.Value;
}
Private Sub trackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trackBar1.Scroll
BrightnessProperty.Value = trackBar1.Value
End Sub
上記のようにチェックボックスとスライダーを変更した時に、それぞれのプロパティのエレメント連動するようにすればWindows Formからのアクセスが簡単にできます。
下記のAPIリファレンスマニュアルにもその他関数などの説明があります。
プログラマーズガイド:VCDプロパティの基本機能
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル