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" プロパティの調整用に使われます。


もちろん使えるようにするためにはヘルパークラスのインスタンスが必要なので、グローバル変数を追加します。

[VB.NET]
Private VCDProp As TIS.Imaging.VCDHelpers.VCDSimpleProperty
[C#]
private TIS.Imaging.VCDHelpers.VCDSimpleProperty VCDProp;

ヘルパークラスとコントロールはForm_Loadイベントで初期化されますのでForm_Loadを追加し、次のコードを挿入してください。

[VB.NET]
' デバイスが未選択の場合、デバイス選択ダイアログを表示
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()
[C#]
// デバイスが未選択の場合、デバイス選択ダイアログを表示
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" プロパティが適切にアップデートされます。次のコードがそれを実行するものです。

[VB.NET]
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
[C#]
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();
}
 
[VB.NET]
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
[C#]
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に、名前をそれぞれBrightnessAutoCheckBoxWhiteBalanceAutoCheckBoxとします。最後にボタンを追加し名前はWhiteBalanceOnePushButton、CaptionプロパティはOne Pushとします。


ではヘルパークラスのインスタンスをコードに追加してください。

[VB.NET]
Private VCDProp As TIS.Imaging.VCDHelpers.VCDSimpleProperty
[C#]
private TIS.Imaging.VCDHelpers.VCDSimpleProperty VCDProp;

Form_Loadイベントでヘルパークラスとコントールを初期化します。 Form_Load イベントを追加し次のコードを挿入してください。

[VB.NET]
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
[C#]
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イベントを追加するコードは以下の通りとなります。

[VB.NET]
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
[C#]
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イベントを追加します。コードは次の通りです。

[VB.NET]
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
[C#]
private void BrightnessAutoCheckBox_CheckedChanged(object sender, EventArgs e)
{
     VCDProp.Automation[VCDIDs.VCDID_Brightness] = BrightnessAutoCheckBox.Checked;
     BrightnessTrackBar.Enabled = !BrightnessAutoCheckBox.Checked;
}

[VB.NET]
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
[C#]
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イベントを追加し、次のコードを挿入します。

[VB.NET]
Private Sub WhitebalanceOnePushButton_Click(ByVal sender As System.Object,
       ByVal e As System.EventArgs) Handles WhitebalanceOnePushButton.Click
     VCDProp.OnePush(VCDIDs.VCDID_WhiteBalance)
End Sub
[C#]
private void WhitebalanceOnePushButton_Click(object sender, EventArgs e)
{
     VCDProp.OnePush(VCDIDs.VCDID_WhiteBalance);
}