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

如何:尋找 PixelFormat 節點的有效值#

若您正在使用CInstantCamera樁式攝影機類別,並希望存取攝影機功能,則需從該攝影機取得節點地圖。此節點地圖包含每個已實作攝影機功能對應的節點。此方法由《攝影機通用介面標準》(GenICam)所定義。GenICam 標準可由此處下載。

根據《GenICam 》標準,相機裝置的所有公開功能都必須列入該相機的GenICam XML 檔案中,並必須採用《GenICam 》標準功能命名規範(SFNC),這意味著,若相關功能在SFNC 中已有定義,則必須採用該網站所列的名稱及介面類型。標準功能命名規範可由此處下載。

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

所有包含值的節點皆具備ToString()和FromString()方法(透過基底介面IValue 繼承而來)。這表示節點的值可以以字串形式讀取和寫入。

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

GenICam 的 GenApi 參考實作定義了介面,但並未定義任何有效值範圍,亦未定義用於特定功能(例如 PixelFormat)的任何枚舉值。GenICam 的 GenApi 參考實作可由此處下載。

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

GenICam (作為一套標準彙編)亦定義了「GenICam Pixel Format 」名稱與值,其中「Pixel Format 」名稱是將與 ToString() 和 FromString() 函式搭配使用的字串(符號名稱),而 32 位元值則是將與 SetIntValue() 和 GetIntValue() 函式搭配使用的 IntValue。已定義的像素格式完整清單可由此處下載。

pylon API 內建了專屬的 Basler 特定枚舉,用於常見的像素格式,即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 符號名稱的函式,需要一個SFNC 版本提示。這是因為在SFNC 2.0.0 版本中,某些像素格式名稱已經變更。

要查詢這台相機相容於哪個版本的SFNC ,請撥打 camera.GetSFNCVersion().

此範例程式碼展示了存取 PixelFormat 功能的各種方法。

若上述連結中有任何一個無法正常運作,或欲瀏覽所有可下載檔案的總覽,請前往:https://www.emva.org/standards-technology/genicam/genicam-downloads/

返回知識文章