VCDプロパティの基本機能
TVCDPropertiesの基本的な機能を紹介すると共に、インターフェースを取得し、値やプロパティの自動設定などのエレメントを調節する方法に関して説明します。
はじめに
このサンプルでは "Brightness"プロパティを使ってプロパティがどのように構成されており、アクセスされるのかを紹介します。まず最初に、"Brightness" 用のVCDPropertyItemクラスライブラリリファレンス>クラス>VCDPropertyItem をコレクションから呼び出します。 そしてスイッチインターフェースとレンジインターフェースがこのVCDPropertyItemクラスライブラリリファレンス>クラス>VCDPropertyItemの各エレメントより呼び出されます。スイッチインターフェースはこのプロパティの自動設定のオン、オフの切り換えに、レンジインターフェースはこのプロパティの値の設定に使用されます。
今回のサンプルプログラムのVB.NET 、C#用のソースコードはMy Documents/IC Imaging Control 3.4内の以下のディレクトリに格納されています。
samples\VB *\VCD Simple
samples\C# *\VCD Simple
プロジェクトの新規作成
新しいプロジェクトを作成し、IC imaging Controlをフォームに追加してください。プログラムを実行する前に、 はじめに: Visual Studio .NETプログラマーズガイド>Visual Studioでスタート にあるように映像デバイスの選択、入力方式、ビデオフォーマットを選択してください。もしくはデバイスを選択せずにプログラムを実行してください。その際はIC Imaging Controlによってデバイス選択のダイアログが出現します。選択をせずにダイアログを閉じた場合、プログラムはエラーメッセージを表示し、終了します。
ではチェックボックスとスライダ(トラックバー)をフォームに追加します。チェックボックスを chkBrightnessAuto、スライダをsldBrightnessと名付けます。
VCDPropertyItemの呼び出し
有効な画像取り込みデバイスが選択された後、"Brightness"用のVCDPropertyItemクラスライブラリリファレンス>クラス>VCDPropertyItem が呼び出されます。
Dim Brightness As TIS.Imaging.VCDPropertyItem
Brightness = IcImagingControl1.VCDPropertyItems.FindItem(TIS.Imaging.VCDIDs.VCDID_Brightness)
TIS.Imaging.VCDPropertyItem Brightness = null;
Brightness = icImagingControl1.VCDPropertyItems.FindItem(TIS.Imaging.VCDIDs.VCDID_Brightness);
変数型 VCDPropertyItemクラスライブラリリファレンス>クラス>VCDPropertyItemを宣言し、VCDPropertyItems.FindItemクラスライブラリリファレンス>クラス>VCDPropertyItems>VCDPropertyItems.FindItem Method メソッドを使って適切なプロパティに割り当てます。呼び出されるプロパティ項目は上記の通りIDで指定されなければなりません。 今回の場合は"Brightness" 用のVCDID_Brightnessということになります。
インターフェースの呼び出しとコントロールの初期化
プロパティは一つかそれ以上のエレメントから構成されています。エレメントには値や自動設定、ワンプッシュ動作、その他のパラメータがあります。プロパティの調整をするのにはインターフェースが使われ、それらはプロパティ項目のエレメントより 取得ことが可能です。では値と自動設定のインターフェースとなる2つのグローバル変数を宣言してください。
Dim BrightnessRange As TIS.Imaging.VCDRangeProperty
Dim BrightnessSwitch As TIS.Imaging.VCDSwitchProperty
private TIS.Imaging.VCDRangeProperty BrightnessRange;
private TIS.Imaging.VCDSwitchProperty BrightnessSwitch;
次のコードはスイッチインターフェースとレンジインターフェースの呼び出し方、また関連するユーザーコントロールを初期化するためにそれらインターフェースの現在の状態を取得をする方法について紹介しています。
If Not Brightness Is Nothing Then
' 値と自動設定のためのスイッチ、レンジインターフェースへのインターフェースを所得
BrightnessRange = Brightness.Elements.FindInterface(TIS.Imaging.VCDIDs.VCDElement_Value + _
":" + _
TIS.Imaging.VCDIDs.VCDInterface_Range)
Try
BrightnessSwitch = Brightness.Elements.FindInterface(TIS.Imaging.VCDIDs.VCDElement_Auto + _
":" + _
TIS.Imaging.VCDIDs.VCDInterface_Switch)
Catch ex As System.Exception
MsgBox("Automation of brightness is not supported by the current device!")
End Try
End If
// 値と自動設定のためのスイッチ、レンジインターフェースへのインターフェースを所得
BrightnessRange = (TIS.Imaging.VCDRangeProperty)Brightness.Elements.FindInterface(
TIS.Imaging.VCDIDs.VCDElement_Value + ":" +
TIS.Imaging.VCDIDs.VCDInterface_Range);
BrightnessSwitch = (TIS.Imaging.VCDSwitchProperty)Brightness.Elements.FindInterface(
TIS.Imaging.VCDIDs.VCDElement_Auto + ":" +
TIS.Imaging.VCDIDs.VCDInterface_Switch);
if (BrightnessSwitch == null)
{
MessageBox.Show("Automation of brightness is not supported by the current device!");
}
プロパティ項目のVCDPropertyElements.FindInterfaceクラスライブラリリファレンス>クラス>VCDPropertyElements>VCDPropertyElements.FindInterface Method メソッドはインターフェースを呼び出すのに使われます。上記の通り、プロパティ項目は一つ以上のエレメントで構成されており、またそのエレメントは一つ以上のインターフェースを提供します。よってVCDPropertyElements.FindInterfaceクラスライブラリリファレンス>クラス>VCDPropertyElements>VCDPropertyElements.FindInterface Methodメソッドを呼び出す際にはエレメントIDとインターフェースIDを指定する必要があります。
インターフェースを取得しましたので、ユーザーコントロールを初期化できます。下記のコードによってそれを実行します。
' BrightnessRangeオブジェクトの現在の範囲と値で
' スライダーを初期化する
sldBrightness.Enabled = True
sldBrightness.Minimum = BrightnessRange.RangeMin
sldBrightness.Maximum = BrightnessRange.RangeMax
sldBrightness.Value = BrightnessRange.Value
' BrightnessSwitchオブジェクトでチェックボックスを初期化する
If Not BrightnessSwitch Is Nothing Then
chkBrightnessAuto.Enabled = True
sldBrightness.Enabled = Not BrightnessSwitch.Switch
chkBrightnessAuto.Checked = BrightnessSwitch.Switch
End If
// 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();
上のコードが示すように、インターフェースクラスがプロパティ項目のエレメントへのアクセスを簡単にしています。
プロパティのエレメントを設定する
最後に、プロパティを調整するためにどのようにインターフェースを使うかを説明します。チェックボックス用のClickイベントとスライダー用のScrollイベントを追加してください。チェックボックスは "Brightness" プロパティの自動設定の切り換えを行います。コードは次の通りです。
Private Sub chkBrightnessAuto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles chkBrightnessAuto.CheckedChanged
BrightnessSwitch.Switch = chkBrightnessAuto.Checked
sldBrightness.Enabled = Not chkBrightnessAuto.Checked
End Sub
private void chkBrightnessAuto_CheckedChanged(object sender, EventArgs e)
{
BrightnessSwitch.Switch = chkBrightnessAuto.Checked;
sldBrightness.Enabled = !chkBrightnessAuto.Checked;
}
上記のコードは現在のチェックボックスの状態を"Brightness" プロパティの自動設定エレメントに割り当てるだけです。また、自動設定がオンの場合スライダーは無効となります。
スライダーのScrollイベント用のコードはより簡単です。
Private Sub sldBrightness_Scroll(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles sldBrightness.Scroll
BrightnessRange.Value = sldBrightness.Value
End Sub
private void sldBrightness_Scroll(object sender, EventArgs e)
{
BrightnessRange.Value = sldBrightness.Value;
}
これでプログラムを実行し、スライダーやチェックボックスを使って "Brightness" プロパティの調整が可能となりました。