VCDSimplePropertyを使用する
IC Imaging Control の version 1.41 までは、デバイスのプロパティは %%Auto, %%AutoAvailable, %%Available, %%Default and %%Range のようなプロパティを使ってアクセスが可能でした。しかしこれらのプロパティはversion 2.0以降においてはあまり使う必要がなくなりました。多少コードを追加する必要 はありますが新しいVCDプロパティはより詳細で包括的なアクセスを可能にしています。以前のようなプロパティのほうが使いやすいという 場合、version 2.0で導入されたヘルパークラスがVCDプロパティにアクセスメソッドを提供し、以前の形式と同じようにお使いいただけます。ここでは そのヘルパークラスの使い方を説明します。
プロジェクトの新規作成
新しいプロジェクトを作成し、IC imaging Controlをフォームに追加してください。プログラムを実行する前に、 Visual Studioでスタート にあるように映像デバイスの選択、入力方式、ビデオフォーマットを選択してください。もしくはデバイスを選択せずにプログラムを実行してください。その際はIC Imaging Controlによってデバイス選択のダイアログが出現します。選択をせずにダイアログを閉じた場合、プログラムはエラーメッセージを表示し、終了します
プロパティにアクセスする
トラックバーはWhiteBalanceTrackBar, ラベルはWhiteBalanceValueLabel ,チェックボックスにはWhiteBalanceAutoCheckBoxと名前を付けます。これらのコントロールはデバイスの "WhiteBalance" プロパティの調整用に使われます。
もちろん使えるようにするためにはヘルパークラスのインスタンスが必要なので、グローバル変数を追加します。
Private VCDProp As TIS.Imaging.VCDHelpers.VCDSimpleProperty
private TIS.Imaging.VCDHelpers.VCDSimpleProperty VCDProp;
ヘルパークラスとコントロールはForm_Loadイベントで初期化されますのでForm_Loadを追加し、次のコードを挿入してください。
' デバイスが未選択の場合、デバイス選択ダイアログを表示
If Not IcImagingControl1.DeviceValid Then
IcImagingControl1.ShowDeviceSettingsDialog()
If Not IcImagingControl1.DeviceValid Then
MsgBox("No device was selected.", MsgBoxStyle.Information, "VCD Simple Property")
Me.Close()
Exit Sub
End If
End If
' VCDPropクラスを初期化しICImagingControlオブジェクトのプロパティにアクセスする
VCDProp = VCDSimpleModule.GetSimplePropertyContainer(IcImagingControl1.VCDPropertyItems)
' オートチェックボックスの初期化
If Not VCDProp.AutoAvailable(VCDIDs.VCDID_WhiteBalance) Then
WhiteBalanceAutoCheckBox.Enabled = False
Else
VCDProp.Automation(VCDIDs.VCDID_WhiteBalance) = False
End If
' トラックバーの初期化
If Not VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceBlue) Then
WhiteBalanceTrackBar.Enabled = False
Else
WhiteBalanceTrackBar.Enabled = True
WhiteBalanceTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalanceTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalanceTrackBar.Value = VCDProp.RangeValue(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalanceTrackBar.TickFrequency =
(WhiteBalanceTrackBar.Maximum - WhiteBalanceTrackBar.Minimum) / 10
WhiteBalanceValueLabel.Text = WhiteBalanceTrackBar.Value End If
' ライブモード開始
IcImagingControl1.LiveStart()
// デバイスが未選択の場合、デバイス選択ダイアログを表示
if( !ICImagingControl1.DeviceValid )
{
ICImagingControl1.ShowDeviceSettingsDialog();
if( !ICImagingControl1.DeviceValid )
{
MessageBox.Show("No device was selected.");
this.Close();
return;
}
}
// VCDPropクラスを初期化しICImagingControlオブジェクトのプロパティにアクセスする
VCDProp = VCDSimpleModule.GetSimplePropertyContainer(ICImagingControl1.VCDPropertyItems);
// オートチェックボックスの初期化
if( !VCDProp.AutoAvailable(VCDIDs.VCDID_WhiteBalance) )
{
WhiteBalanceAutoCheckBox.Enabled = false;
}
else
{
VCDProp.Automation[VCDIDs.VCDID_WhiteBalance] = false;
}
// トラックバーの初期化
if (!VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceBlue))
{
WhiteBalanceTrackBar.Enabled = false;
}
else
{
WhiteBalanceTrackBar.Enabled = true;
WhiteBalanceTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceBlue);
WhiteBalanceTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceBlue);
WhiteBalanceTrackBar.Value = VCDProp.RangeValue[VCDIDs.VCDElement_WhiteBalanceBlue];
WhiteBalanceTrackBar.TickFrequency =
(WhiteBalanceTrackBar.Maximum - WhiteBalanceTrackBar.Minimum) / 10;
WhiteBalanceValueLabel.Text = WhiteBalanceTrackBar.Value.ToString();
}
// ライブモードの開始
ICImagingControl1.LiveStart();
コントロールに機能を付加するため、トラックバーにScrollイベントを、チェックボックスにCheckedChangedイベントを追加します。これらのイベントが呼び出されると、"WhiteBalance" プロパティが適切にアップデートされます。次のコードがそれを実行するものです。
Private Sub WhiteBalanceTrackBar_Scroll(ByVal sender As Object, ByVal e As System.EventArgs)
Handles WhiteBalanceTrackBar.Scroll
' WhiteBalanceの値を設定する
VCDProp.RangeValue(VCDIDs.VCDID_WhiteBalance) = WhiteBalanceTrackBar.Value
' 現在のWhiteBalanceの値を表示
WhiteBalanceValueLabel.Text = VCDProp.RangeValue(VCDIDs.VCDID_WhiteBalance)
End Sub
private void WhiteBalanceTrackBar_Scroll(object sender, System.EventArgs e)
{
//WhiteBalanceの値を設定する
VCDProp.RangeValue[VCDIDs.VCDID_WhiteBalance] = WhiteBalanceTrackBar.Value;
//現在のWhiteBalanceの値を表示
WhiteBalanceValueLabel.Text = VCDProp.RangeValue[VCDIDs.VCDID_WhiteBalance].ToString();
}
Private Sub WhiteBalanceAutoCheckBox_CheckedChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles WhiteBalanceAutoCheckBox.CheckedChanged
If WhiteBalanceAutoCheckBox.Checked Then
VCDProp.Automation(VCDIDs.VCDID_WhiteBalance) = True
WhiteBalanceTrackBar.Enabled = False
Else
VCDProp.Automation(VCDIDs.VCDID_WhiteBalance) = False
WhiteBalanceTrackBar.Enabled = True
End If
End Sub
private void WhiteBalanceAutoCheckBox_CheckedChanged(object sender, System.EventArgs e)
{
if ( WhiteBalanceAutoCheckBox.Checked )
{
VCDProp.Automation[VCDIDs.VCDID_WhiteBalance] = true;
WhiteBalanceTrackBar.Enabled = false;
}
else
{
VCDProp.Automation[VCDIDs.VCDID_WhiteBalance] = false;
WhiteBalanceTrackBar.Enabled = true;
}
}
高度なプロパティにアクセスする
プロパティの中には上記であげたようなもの以外に、より詳細なアクセスを可能にするものがあります。"WhiteBalance"を例にとると、"ワンプッシュ"と呼ばれる機能は赤と青の値を指定し、限られた時間内で自動調整を行えるものです。このような高度なプロパティには次のIDを使用してアクセスすることが可能です。: VCDElement_WhiteBalanceBlue,VCDElement_WhiteBalanceRed"ワンプッシュ" はVCDSimpleProperty.OnePush メソッドを呼び出すことで動作し、その際はVCDID_WhiteBalance, VCDElement_WhiteBalanceBlue,VCDElement_WhiteBalanceRedのいずれかをパラメータとします。
次の例ではどのようにして"WhiteBalanceBlue" と "WhiteBalanceRed" プロパティにアクセスするかを紹介しています。また "Brightness" プロパティにもアクセスして標準のプロパティを使用した時と高度なプロパティを使用した時の違いをお見せします。
"プロジェクトの新規作成" のところで紹介したとおりにプロジェクトを作成後、フォームにいくつかコントロールを追加します。トラックバーを3つ追加しそれぞれにBrightnessTrackBar, WhiteBalanceBlueTrackBar,WhiteBalanceRedTrackBarと名前を付けます。そして次にチェックボックスを2つ追加し、CaptionプロパティをAutoに、名前をそれぞれBrightnessAutoCheckBoxと WhiteBalanceAutoCheckBoxとします。最後にボタンを追加し名前はWhiteBalanceOnePushButton、CaptionプロパティはOne Pushとします。
ではヘルパークラスのインスタンスをコードに追加してください。
Private VCDProp As TIS.Imaging.VCDHelpers.VCDSimpleProperty
private TIS.Imaging.VCDHelpers.VCDSimpleProperty VCDProp;
Form_Loadイベントでヘルパークラスとコントールを初期化します。 Form_Load イベントを追加し次のコードを挿入してください。
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, "VCD Simple Property")
Me.Close()
Exit Sub
End If
End If
' VCDPropクラスを初期化しICImagingControlオブジェクトのプロパティにアクセスする
VCDProp = TIS.Imaging.VCDHelpers.VCDSimpleModule.GetSimplePropertyContainer
(IcImagingControl1.VCDPropertyItems)
' オートチェックボックスを初期化
If Not VCDProp.AutoAvailable(VCDIDs.VCDID_Brightness) Then
BrightnessAutoCheckBox.Enabled = False
Else
VCDProp.Automation(VCDIDs.VCDID_Brightness) = False
End If
If Not VCDProp.AutoAvailable(VCDIDs.VCDID_WhiteBalance) Then
WhitebalanceCheckBox.Enabled = False
WhitebalanceOnePushButton.Enabled = False
Else
VCDProp.Automation(VCDIDs.VCDID_WhiteBalance) = False
End If
' トラックバーを初期化
If Not VCDProp.Available(VCDIDs.VCDID_Brightness) Then
BrightnessTrackBar.Enabled = False
Else
BrightnessTrackBar.Enabled = True
BrightnessTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDID_Brightness)
BrightnessTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDID_Brightness)
BrightnessTrackBar.Value = VCDProp.RangeValue(VCDIDs.VCDID_Brightness)
BrightnessTrackBar.TickFrequency = (BrightnessTrackBar.Maximum - BrightnessTrackBar.Minimum) / 10
BrightnessValueLabel.Text = BrightnessTrackBar.Value
End If
If Not VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceBlue) Then
WhiteBalBlueTrackBar.Enabled = False
Else
WhiteBalBlueTrackBar.Enabled = True
WhiteBalBlueTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalBlueTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalBlueTrackBar.Value = VCDProp.RangeValue(VCDIDs.VCDElement_WhiteBalanceBlue)
WhiteBalBlueTrackBar.TickFrequency =
(WhiteBalBlueTrackBar.Maximum - WhiteBalBlueTrackBar.Minimum) / 10
WhiteBalBlueLabel.Text = WhiteBalBlueTrackBar.Value
End If
If Not VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceRed) Then
WhiteBalRedTrackBar.Enabled = False
Else
WhiteBalRedTrackBar.Enabled = False
WhiteBalRedTrackBar.Enabled = True
WhiteBalRedTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceRed)
WhiteBalRedTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceRed)
WhiteBalRedTrackBar.Value = VCDProp.RangeValue(VCDIDs.VCDElement_WhiteBalanceRed)
WhiteBalRedTrackBar.TickFrequency =
(WhiteBalRedTrackBar.Maximum - WhiteBalRedTrackBar.Minimum) / 10
WhiteBalRedLabel.Text = WhiteBalRedTrackBar.Value
End If
' ライブモードの開始
IcImagingControl1.LiveStart()
End Sub
private void Form1_Load(object sender, EventArgs e)
{
// デバイスが未選択の場合、デバイス選択ダイアログを表示
if (!icImagingControl1.DeviceValid)
{
icImagingControl1.ShowDeviceSettingsDialog();
if (!icImagingControl1.DeviceValid)
{
MessageBox.Show("No device was selected.");
this.Close();
return;
}
}
// VCDPropクラスを初期化しICImagingControlオブジェクトのプロパティにアクセスする
VCDProp = TIS.Imaging.VCDHelpers.VCDSimpleModule.GetSimplePropertyContainer
(icImagingControl1.VCDPropertyItems);
// オートチェックボックスを初期化
if (!VCDProp.AutoAvailable(VCDIDs.VCDID_Brightness))
BrightnessAutoCheckBox.Enabled = false;
else
VCDProp.Automation[VCDIDs.VCDID_Brightness] = false;
if (!VCDProp.AutoAvailable(VCDIDs.VCDID_WhiteBalance))
{
WhitebalanceCheckBox.Enabled = false;
WhitebalanceOnePushButton.Enabled = false;
}
else
VCDProp.Automation[VCDIDs.VCDID_WhiteBalance] = false;
// トラックバーを初期化
if (!VCDProp.Available(VCDIDs.VCDID_Brightness))
{
BrightnessTrackBar.Enabled = false;
}
else
{
BrightnessTrackBar.Enabled = true;
BrightnessTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDID_Brightness);
BrightnessTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDID_Brightness);
BrightnessTrackBar.Value = VCDProp.RangeValue[VCDIDs.VCDID_Brightness];
BrightnessTrackBar.TickFrequency = (BrightnessTrackBar.Maximum - BrightnessTrackBar.Minimum) / 10;
BrightnessValueLabel.Text = BrightnessTrackBar.Value.ToString();
}
if (!VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceBlue))
WhiteBalBlueTrackBar.Enabled = false;
else
{
WhiteBalBlueTrackBar.Enabled = true;
WhiteBalBlueTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceBlue);
WhiteBalBlueTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceBlue);
WhiteBalBlueTrackBar.Value = VCDProp.RangeValue[VCDIDs.VCDElement_WhiteBalanceBlue];
WhiteBalBlueTrackBar.TickFrequency =
(WhiteBalBlueTrackBar.Maximum - WhiteBalBlueTrackBar.Minimum) / 10;
WhiteBalBlueLabel.Text = WhiteBalBlueTrackBar.Value.ToString();
}
if (!VCDProp.Available(VCDIDs.VCDElement_WhiteBalanceRed))
WhiteBalRedTrackBar.Enabled = false;
else
{
WhiteBalRedTrackBar.Enabled = false;
WhiteBalRedTrackBar.Enabled = true;
WhiteBalRedTrackBar.Minimum = VCDProp.RangeMin(VCDIDs.VCDElement_WhiteBalanceRed);
WhiteBalRedTrackBar.Maximum = VCDProp.RangeMax(VCDIDs.VCDElement_WhiteBalanceRed);
WhiteBalRedTrackBar.Value = VCDProp.RangeValue[VCDIDs.VCDElement_WhiteBalanceRed];
WhiteBalRedTrackBar.TickFrequency =
(WhiteBalRedTrackBar.Maximum - WhiteBalRedTrackBar.Minimum) / 10;
WhiteBalRedLabel.Text = WhiteBalRedTrackBar.Value.ToString();
}
// ライブモードの開始
icImagingControl1.LiveStart();
}
上記の通り、"WhiteBalanceBlue" や "WhiteBalanceRed" の値のトラックバーは"Brightness"値のトラックバーの初期化と全く同じ方法で行われます。唯一の違いはプロパティを指定するために"Item ID"ではなく "Element ID" を使用することだけです。
プロパティのアップデート行うためにいくつかのイベントを追加する必要があります。まずは各トラックバー用のScrollイベントを追加します。 "Brightness" トラックバー用のScrollイベントを追加するコードは以下の通りとなります。
Private Sub BrightnessTrackBar_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BrightnessTrackBar.Scroll
VCDProp.RangeValue(VCDIDs.VCDID_Brightness) = BrightnessTrackBar.Value
BrightnessValueLabel.Text = VCDProp.RangeValue(VCDIDs.VCDID_Brightness)
End Sub
private void BrightnessTrackBar_Scroll(object sender, EventArgs e)
{
VCDProp.RangeValue[VCDIDs.VCDID_Brightness] = BrightnessTrackBar.Value;
BrightnessValueLabel.Text = VCDProp.RangeValue[VCDIDs.VCDID_Brightness].ToString();
}
"WhiteBalanceBlue"と"WhiteBalanceRed"トラックバー用の Scrollイベントは同じようなものです。
両方のチェックボックスにCheckedChangedイベントを追加します。コードは次の通りです。
Private Sub BrightnessAutoCheckBox_CheckedChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles BrightnessAutoCheckBox.CheckedChanged
VCDProp.Automation(VCDIDs.VCDID_Brightness) = BrightnessAutoCheckBox.Checked
BrightnessTrackBar.Enabled = Not BrightnessAutoCheckBox.Checked
End Sub
private void BrightnessAutoCheckBox_CheckedChanged(object sender, EventArgs e)
{
VCDProp.Automation[VCDIDs.VCDID_Brightness] = BrightnessAutoCheckBox.Checked;
BrightnessTrackBar.Enabled = !BrightnessAutoCheckBox.Checked;
}
Private Sub WhitebalanceCheckBox_CheckedChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles WhitebalanceCheckBox.CheckedChanged
VCDProp.Automation(VCDIDs.VCDID_WhiteBalance) = WhitebalanceCheckBox.Checked
WhiteBalBlueTrackBar.Enabled = Not WhitebalanceCheckBox.Checked
WhiteBalRedTrackBar.Enabled = Not WhitebalanceCheckBox.Checked
End Sub
private void WhitebalanceCheckBox_CheckedChanged(object sender, EventArgs e)
{
VCDProp.Automation[VCDIDs.VCDID_WhiteBalance] = WhitebalanceCheckBox.Checked;
WhiteBalBlueTrackBar.Enabled = !WhitebalanceCheckBox.Checked;
WhiteBalRedTrackBar.Enabled = !WhitebalanceCheckBox.Checked;
}
cmdWhiteBalanceOnePushボタンのClickイベントを追加し、次のコードを挿入します。
Private Sub WhitebalanceOnePushButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles WhitebalanceOnePushButton.Click
VCDProp.OnePush(VCDIDs.VCDID_WhiteBalance)
End Sub
private void WhitebalanceOnePushButton_Click(object sender, EventArgs e)
{
VCDProp.OnePush(VCDIDs.VCDID_WhiteBalance);
}