跳至內容
測試伺服器
開發伺服器

如何:尋找 PixelFormat Node 的有效值#

如果您正在使用 CInstantCamera pylon 相機類別並想要存取相機功能,您需要從相機取得節點對應表 (node map)。此節點對應表包含每個已實作相機功能的節點。此方法是由 Generic Interface for Cameras Standard (GenICam) 所定義。您可以在此處下載 GenICam 標準。

根據 GenICam 標準,相機裝置的所有公開功能都必須包含在相機的 GenICam XML 檔案中,並且必須使用 GenICam Standard Feature Naming Convention (SFNC),也就是說,如果這些功能存在,則必須使用其 SFNC 名稱和介面類型。您可以在此處下載標準功能命名慣例 (SFNC)。

PixelFormat 功能是 SFNC 中列為建議功能的其中一項標準功能,其介面類型定義為 IEnumeration。

所有包含值的節點都共用 ToString() 和 FromString()(透過基底介面 IValue 繼承)。這表示節點的值可以讀取和寫入為字串 (as string)。

特定節點提供其他特定的存取方法,例如 Enumeration 介面類型除了 ToString() 和 FromString() 之外,還提供 SetIntValue() 和 GetIntValue()。

GenICam GenApi Reference Implementation 定義了介面,但它並未定義任何適用於特定功能(例如 PixelFormat)的有效值範圍或列舉值。您可以在此處下載 GenICam GenApi 參考實作。

那麼,我們該如何知道哪個 PixelFormat 字串對應到哪個 IntValue 呢?

GenICam(作為標準的集合)也定義了 GenICam Pixel Format Names and Values,其中 Pixel Format Name 是要與 ToString() 和 FromString() 一起使用的字串(Symbolic Name),而 32 位元值則是要與 SetIntValue() 和 GetIntValue() 一起使用的 IntValue。您可以在此處下載完整定義的 pixel format 清單。

pylon API 隨附其專屬的 Basler 專用列舉,用於常見的 pixel format:EPixelType (PixelType.h)。此外,還有一個輔助類別 CPixelTypeMapper (PixelTypeMapper.h)。此輔助類別可用於在 GenICam 值(字串或 IntValue)與 pylon 的 EPixelType 列舉之間進行對應。

以下提供可用的對應函式:

EPixelType GetPylonPixelTypeFromNodeValue(int64_t nodeValue) const;
static EPixelType GetPylonPixelTypeByName(const char* pszSymbolicName);
static EPixelType GetPylonPixelTypeByName(const String_t& symbolicName)
static const char* GetNameByPixelType(EPixelType pixelType, SFNCVersion sfncVer = SFNCVersion\_pre2\_0);

後者從 EPixelType 對應至 GenICam Symbolic Name 的函式需要 SFNC Version 提示。這是因為某些 pixel format 名稱在 SFNC Version 2.0.0 中已遭變更。

相機與哪個 SFNC 版本相容,可以透過呼叫以下內容來取得 camera.GetSFNCVersion().

此 範例程式碼 顯示了存取 PixelFormat 功能的不同方式。

如果上述連結之一無法使用,或者若要檢視所有可用的下載項目,請前往:https://www.emva.org/standards-technology/genicam/genicam-downloads/

返回知識文章