操作指南:为 PixelFormat 节点查找有效值#
如果您正在使用 CInstantCamera pylon 相机类并希望访问相机功能,则需要从相机获取节点映射。此节点映射包含每个已实现相机功能的节点。此方法由 Generic Interface for Cameras Standard(GenICam)定义。可在此处下载 GenICam 标准。
根据 GenICam 标准,相机设备的所有公开功能必须包含在相机的 GenICam XML 文件中,并且必须使用 GenICam Standard Feature Naming Convention(SFNC),这意味着如果这些功能存在,则必须使用相应的 SFNC 名称和接口类型。可在此处下载标准功能命名惯例 (SFNC)。
Pixel Format 功能是 SFNC 中列出的推荐标准功能之一,其接口类型定义为 IEnumeration。
所有包含值的节点都通用的方法有 ToString() 和 FromString()(通过基础接口 IValue 继承)。这意味着可以读取和写入节点的 string 值。
特定的节点提供其他特定的访问方法,例如,除了 ToString() 和 FromString() 之外,Enumeration 接口类型还提供 SetIntValue() 和 GetIntValue()。
GenICam GenApi Reference Implementation 定义了接口,但它未定义任何有效值范围,也未定义用于特定功能(例如 Pixel Format)的任何枚举值。可在此处下载 GenICam GenApi 参考实现。
那么,我们如何知道哪个 Pixel Format 字符串对应哪个 IntValue 呢?
GenICam(作为标准的集合)还定义了 GenICam Pixel Format Names and Values,其中 Pixel Format 名称是用于 ToString() 和 FromString() 的字符串(Symbolic Name),而 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 Symbolic Name 的后一个函数需要一个 SFNC 版本提示。这是因为某些像素格式名称已在 SFNC 2.0.0 版本中更改。
可以通过调用以下内容获取相机兼容的 SFNC 版本 camera.GetSFNCVersion().
此示例代码展示了访问 Pixel Format 功能的不同方法。
如果上述链接之一无法正常工作,或者要查看所有可用下载的概述,请访问:https://www.emva.org/standards-technology/genicam/genicam-downloads/