デバイスプロパティへのアクセス

このセクションでは、通常はビデオキャプチャデバイスであるコンポーネントのプロパティを取得、読み取り、変更する方法について説明します。

プロパティマップ

プロパティは PropertyMap を通してアクセスします。たとえば、Grabber によってオープンされているビデオキャプチャデバイスのデバイスプロパティ用のプロパティマップを取得するには、Grabber.DevicePropertyMap を使用します。プロパティマップオブジェクトは、ドライバ設定(Grabber.DriverPropertyMap)、インターフェース(Interface.PropertyMap)、およびコーデック設定(VideoWriter.PropertyMap)にも用意されています。

プロパティ識別子

各プロパティは、ExposureTimeGain のような文字列の識別子によって特定されます。多くのプロパティ識別子は GenICam 標準機能命名規則(SFNC) によって定義されていますが、デバイス固有の追加プロパティを持つ場合もあります。

一般的なプロパティ識別子は、PropId クラスに定義されています。

プロパティオブジェクト

各プロパティには、表示名、説明、型、可視性およびアクセス可否に関する情報が含まれています。表示名は、ユーザーインターフェース上でプロパティを分かりやすい名前で表示するために使用でき、説明にはプロパティの意味や使用方法に関する追加情報を含めることができます。

PropertyMap.SetValue やそのオーバーロードなど、プロパティを直接操作するための複数の関数が用意されており、型と値が既知のプロパティを簡単に設定することができます。

詳細なプロパティ情報の取得や設定は、オブジェクト指向のインターフェースを通して行います。Property オブジェクトのインスタンスを取得するには、プロパティの既知の識別子を指定して PropertyMap.Find または関連する関数を呼び出します。

文字列(string)でプロパティを指定する型指定なしの検索関数は、Property 基底クラスへの参照を返します。一方、PropId を使用してプロパティを指定する型付きの検索関数は、PropIntegerPropEnumeration などの派生プロパティクラスへの参照を返します。Property 基底クラスは、実際の型へキャストすることが可能です。

プロパティオブジェクトからは、たとえば以下のような汎用的な属性を取得できます。

特殊化されたプロパティタイプ

各プロパティ型にはそれぞれ異なる操作方法があり、型に依存した追加情報を提供することができます。

Integerプロパティ

画像センサーから読み出される ROI の Width や Height など、整数値で表される設定を構成するために使用されます。
Integerプロパティは、有効な値として最小値および最大値、ならびにステップ幅を定義します。
また、単位や表示ヒントなどの追加属性を定義することもできます。
Integerプロパティは PropInteger クラスのインスタンスとして表されます。

Floatプロパティ

ExposureTimeAcquisitionFrameRate など、浮動小数点数で表される設定を構成するために使用されます。
Floatプロパティは、有効な値として最小値および最大値、ならびに任意のステップ幅を定義します。
また、単位や表示ヒントなどの追加属性を定義することもできます。
Floatプロパティは PropFloat クラスのインスタンスとして表されます。

Commandプロパティ

Commandプロパティは、デバイスが実行できる操作を表します。たとえば TriggerSoftware などです。
コマンドは実行することができ、完了状態を問い合わせることも可能です。
Commandプロパティは PropCommand クラスのインスタンスとして表されます。

Booleanプロパティ

Booleanプロパティは、単純なオン/オフのスイッチです。
Booleanプロパティは PropBoolean クラスのインスタンスとして表されます。

Enumerationプロパティ

Enumerationプロパティでは、文字列で識別される有効な値の集合から選択することができます。
これらは、PixelFormat などのカメラ設定を構成するために使用されます。
列挙エントリにはそれぞれ整数値も関連付けられていますが、その数値が必ずしも明確な意味を持つとは限らないため、使用には注意が必要です。
Enumerationプロパティは PropEnumeration クラスのインスタンスとして表されます。

Stringプロパティ

Stringプロパティは、主にデバイス情報をテキスト形式で提供するために使用されます。
Stringプロパティは PropString クラスのインスタンスとして表されます。

Registerプロパティ

Registerロパティは、固定長の生バイトデータ配列を表します。
Registerプロパティは PropRegister クラスのインスタンスとして表されます。

Categoryプロパティ

Categoryプロパティは、他のプロパティへのリンクを含む特殊なプロパティです。
これにより、Root カテゴリを起点としたプロパティのツリー構造が形成されます。このツリーはユーザーインターフェースの構成に利用できます。
Categoryプロパティは PropCategory クラスのインスタンスとして表されます。