# Omegonprocam API 手册

# 1. 版本和平台

- 版本:56.25834.$WCDATE=%Y%m%d$

- 平台
  - Win32:
    - x64: Win7及以上版本
    - x86: XP SP3及以上版本; CPU至少需要支持SSE2指令集
    - arm64: Win10及以上版本
    - arm: Win10及以上版本
  - WinRT/UWP: x64, x86, arm64, arm；Windows 10及以上版本
  - macOS:
    - x64+x86；macOS 10.10及以上版本
    - x64+arm64: macOS 11.0及以上版本, 支持x64和Apple silicon(如M1, M2等)
  - Linux: 内核2.6.27及以上
    - x64: GLIBC 2.14及以上
    - x86: CPU至少需要支持SSE3指令集；GLIBC 2.8及以上
    - arm64: GLIBC 2.17及以上；由aarch64-linux-gnu(版本5.4.0)编译
    - armhf: GLIBC 2.8及以上；由arm-linux-gnueabihf(版本5.4.0)编译
    - armel: GLIBC 2.8及以上；由arm-linux-gnueabi(版本5.4.0)编译
  - Android: __ANDROID_API__ >= 24 (Android 7.0); 由android-ndk-r18b编译; 请参阅这里
    - arm64: arm64-v8a
    - arm: armeabi-v7a
    - x64: x86_64
    - x86

# 2. 简介

Omegonprocam系列相机支持多种API, 包括：Native C/C++, .NET(C#和VB.NET), Python, Java, DirectShow, Twain, LabView, MatLab等等. Native C/C++ API作为底层(Low Level) API相比较其他API的特点是使用纯C/C++开发, 不依赖其他的运行时库, 接口简洁, 控制灵活. 本SDK压缩包包含了所有需要用到的的资源和信息, 目录如下:

- inc

> omegonprocam.h, C/C++头文件

- win: Microsoft Windows平台文件
  - dotnet

    > omegonprocam.cs, 支持C#. omegonprocam.cs使用P/Invoke调用至omegonprocam.dll. 请把omegonprocam.cs拷贝到你的C#工程中使用.
    > omegonprocam.vb, 支持VB.NET. omegonprocam.vb使用P/Invoke调用至omegonprocam.dll. 请把omegonprocam.vb拷贝到你的VB.NET工程中使用.

  - x86: omegonprocam.dll, omegonprocam.lib
  - x64: omegonprocam.dll, omegonprocam.lib
  - arm: omegonprocam.dll, omegonprocam.lib
  - arm64: omegonprocam.dll, omegonprocam.lib
  - winrt

    > 适用于WinRT / UWP (Universal Windows Platform) / Windows Store App的动态库文件.
    > 它们和Windows Runtime兼容, 可以被Universal Windows Platform app引用.
    > 如果使用C#开发UWP, 可以使用omegonprocam.cs包装类.
    > 请注意:

    > > 1. uwp只能使用WinUSB驱动, 不能使用私有私有驱动. 如果已安装, 请在设备管理器中卸载私有驱动, 之后Windows会自动使用Winusb.
    > > 2. uwp的DeviceCapability, 参阅How to add USB device capabilities to the app manifest.

  - drivers(2017.1.1之后生产的相机支持WinUSB, 强烈建议不在Windows8及以上版本上安装驱动)

    > x86 文件夹包含x86的内核态驱动文件, 包括omegonprocam.cat, omegonprocam.inf和omegonprocam.sys
    > x64 文件夹包含x64的内核态驱动文件, 包括omegonprocam.cat, omegonprocam.inf和omegonprocam.sys

    > 建议使用DPInst.exe来自动安装驱动, 如使用NSIS制作安装文件, 可以使用类似如下语句:

    >     ExecWait '"$INSTDIR\drivers\x64\DPInst.exe" /SA /SW /PATH "$INSTDIR\drivers\x64"'

- linux: Linux平台文件
  - udev: 99-omegonprocam.rules, udev rule文件. 请参考: http://reactivated.net/writing_udev_rules.html

    > 不重启重新加载规则:

    >     udevadm control --reload-rules && udevadm trigger

  - x86: libomegonprocam.so, x86版本so文件
  - x64: libomegonprocam.so, x64版本so文件
  - armel: libomegonprocam.so, armel版本so文件, toolchain为arm-linux-gnueabi
  - armhf: libomegonprocam.so, armhf版本so文件, toolchain为arm-linux-gnueabihf
  - arm64: libomegonprocam.so, arm64版本so文件, toolchain为aarch64-linux-gnu

  > ***Linux区分平台的简便方法, 在目标平台执行file /bin/ls. 以下为某树莓派下的结果, 可以看出属于armhf:

  >     $ file /bin/ls
  >     /bin/ls: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=67a394390830ea3ab4e83b5811c66fea9784ee69, stripped

  > 另外一个示例, 可以看出属于x64:

  >     $ file /bin/ls
  >     /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c8ada1f7095f6b2bb7ddc848e088c2d615c3743e, stripped

- android: Android平台arm, arm64, x86, x64四种架构的libomegonprocam.so

- mac: macOS平台文件, dylib: x64+x86, x64+arm64

- python: omegonprocam.py和示例代码

- java: omegonprocam.java和示例代码

- doc: SDK使用文档, 简体中文, 英文

- extra
  - update: 固件升级工具. 提醒: 均依赖相机动态库, 运行时请复制omegonprocam.dll/so/dylib到所在目录.
    - updatefw: 升级固件, 相机命名, 设置GigE相机的MAC/IP地址, GUI界面, 只支持Windows
    - updatecli: 升级固件, 控制台界面, 支持Windows/Linux/MacOS
  - directshow: DirectShow SDK和demo程序
  - twain: TWAIN SDK
  - labview: Labview SDK和demo程序
  - matlab: MatLab demo程序
  - imagepro: liveedf, live stitch, live stack

# 3. 概念和术语

## a. 获取图像数据的模式: “Pull” Mode vs “Push” Mode (“拉”模式 vs “推”模式)

Omegonprocam提供了两种模式来获取图像数据: Pull Mode 和 Push Mode. 以下所讲的几种方式中, 从功能上说它们都是平等的, 开发者可以任选一种使用. 推荐使用拉模式, 因为它更简单,且在多线程情况下更加不容易出错, 尤其是使用windows消息机制的情况下.

- Pull Mode, omegonprocam 扮演被动角色, 应用程序从omegonprocam“拉”图像数据. omegonprocam内部线程从相机获得图像数据,并保存到内部缓存中, 然后通知应用程序来取图像数据. 应用程序可以调用Omegonprocam_PullImageV3或Omegonprocam_PullImage(WithRowPitch)(V2), Omegonprocam_PullStillImage(WithRowPitch)(V2)来获取图像数据. 存在两种方式来通知应用程序:

  > a) 使用Windows消息机制: 通过调用函数 Omegonprocam_StartPullModeWithWndMsg启动Pull mode模式. 当事件发生时, omegonprocam会主动发送消息(PostMessage)到指定窗口. 参数WPARAM 是事件类型, 请参考OMEGONPROCAM_EVENT_xxxx的定义. 参数LPARAM保留未使用. 本模式规避了多线程问题, 是最简单的方式.(显然, 这种方式只支持Windows系统, 不支持Linux和macOS.)

  > b) 使用回调函数使用 Omegonprocam_StartPullModeWithCallback启动Pull mode模式. 当事件发生时, 会调用POMEGONPROCAM_EVENT_CALLBACK回调函数.

> 在Pull Mode 情况下, omegonprocam不但可以通知应用程序图像数据或者静态图片到达, 还可以通知其他事件类型, 如下所示:

> 事件 | 来源 | 描述
> OMEGONPROCAM_EVENT_EXPOSURE | 软件 | 曝光时间发生改变
> OMEGONPROCAM_EVENT_TEMPTINT | 白平衡参数发生改变,Temp/Tint模式, 请参阅这里.
> OMEGONPROCAM_EVENT_WBGAIN | 白平衡参数发生改变,RGB Gain模式, 请参阅这里.
> OMEGONPROCAM_EVENT_IMAGE | 视频图像数据到达(视频). 使用Omegonprocam_PullImageXXXX“拉”图像数据
> OMEGONPROCAM_EVENT_STILLIMAGE | 静态图片数据到达(Omegonprocam_Snap或Omegonprocam_SnapN引发). 使用Omegonprocam_PullImageXXXX“拉”图像数据
> OMEGONPROCAM_EVENT_ERROR | 一般性错误, 数据采集不能继续
> OMEGONPROCAM_EVENT_DISCONNECTED | 相机断开连接, 如被拔出
> OMEGONPROCAM_EVENT_NOFRAMETIMEOUT | 规定时间内没有抓取到视频帧. 见OMEGONPROCAM_OPTION_NOFRAME_TIMEOUT
> OMEGONPROCAM_EVENT_NOPACKETTIMEOUT | 规定时间内没有抓取到视频包. 见OMEGONPROCAM_OPTION_NOPACKET_TIMEOUT
> OMEGONPROCAM_EVENT_TRIGGERFAIL | 触发失败(如帧数据错误或超时)
> OMEGONPROCAM_EVENT_BLACK | 黑平衡参数发生改变
> OMEGONPROCAM_EVENT_FFC | 平场校正(flat field correction)状态发生改变
> OMEGONPROCAM_EVENT_DFC | 暗场校正(dark field correction)状态发生改变
> OMEGONPROCAM_EVENT_FPNC | 固定模式噪声校正(fixed pattern noise correction)状态发生改变
> OMEGONPROCAM_EVENT_ROI | ROI发生改变
> OMEGONPROCAM_EVENT_LEVELRANGE | Level range 发生改变
> OMEGONPROCAM_EVENT_AUTOEXPO_CONV | 自动曝光收敛
> OMEGONPROCAM_EVENT_AUTOEXPO_CONVFAIL | 单次模式自动曝光收敛失败
> OMEGONPROCAM_EVENT_FACTORY | 恢复出厂设置
> OMEGONPROCAM_EVENT_EXPO_START | 硬件 | 硬件事件：曝光开始
> OMEGONPROCAM_EVENT_EXPO_STOP | 硬件事件：曝光结束
> OMEGONPROCAM_EVENT_TRIGGER_ALLOW | 硬件事件：触发允许
> OMEGONPROCAM_EVENT_TRIGGER_IN | 硬件事件：触发进入
> OMEGONPROCAM_EVENT_HEARTBEAT | 硬件事件：心跳, 可以用于监视相机是否存活. 参见OMEGONPROCAM_OPTION_HEARTBEAT

- Push Mode情况下, omegonprocam作为主动方, 一旦内部底层线程从camera中抓取到图像数据, 就通过POMEGONPROCAM_DATA_CALLBACK_V4/V3把图像数据“推”给应用程序 (请注意这个回调函数是在omegonprocam内部线程上下文中执行的). 调用Omegonprocam_StartPushModeV4/V3函数进入推模式.推模式比较复杂, 有一些特别注意事项（如多线程问题, 也不能在POMEGONPROCAM_DATA_CALLBACK_V4/V3回调函数里面调用Omegonprocam_Close和Omegonprocam_Stop等等）.

## b. 静态抓拍(静态图片, Still Image, Snap)

大部分的相机型号都支持所谓静态抓拍的能力, 指相机在连续的视频预览过程中, 临时切换到另外一个分辨率, 抓取一帧静态图片之后, 马上把分辨率切换回原始分辨率的过程.

举例来说, UCMOS05100KPA支持3种分辨率, 假设当前视频预览分辨率为1280 * 960, 调用函数Omegonprocam_Snap(h, 0)静态抓拍分辨率2592 * 1944的静态图片, 这时相机临时切换到2592 * 1944的分辨率, 抓取一帧数据之后, 又把分辨率切换成原来的1280 * 960.

> a) 拉模式下, 抓拍到静态图片之后, 通知外层应用OMEGONPROCAM_EVENT_STILLIMAGE事件, 然后外层应用调用Omegonprocam_PullStillImage(V2)获取静态图片的数据.

> b) 推模式下, 抓拍到静态图片之后, 回调函数POMEGONPROCAM_DATA_CALLBACK_V4/V3, 参数bSnap设置为TRUE, 图片的分辨率等信息在参数pHeader中.

可以通过函数Omegonprocam_get_StillResolutionNumber的返回值或者结构OmegonprocamModelV2的still值来查看是否支持静态抓拍能力.

## c. 数据格式: RGB vs RAW

Omegonprocam支持两种数据格式: RGB格式(默认)和RAW格式. RAW模式可以通过调用函数Omegonprocam_put_Option设置参数OMEGONPROCAM_OPTION_RAW为1开启.

- RGB格式: 本模式下, 获取底层传感器的数据之后, 进行内部的颜色处理, 输出结果中每像素包含3个分量分别代表R/G/B值.

- RAW格式: 本模式下, 直接获取底层传感器的“裸”数据, 不进行内部颜色处理. 具体的像素格式(Pixel Format)可以调用函数Omegonprocam_get_RawFormat获取. RAW格式模式下, 有关颜色处理的功能(如白平衡)和函数（如Omegonprocam_put_Hue,Omegonprocam_AwbOnce等等）都无意义.

用户可以通过OMEGONPROCAM_OPTION_RAW调用函数Omegonprocam_put_Option来切换这两种模式. 请注意相机必须处于非运行状态才能修改此设置.

用户可以通过OMEGONPROCAM_OPTION_RGB调用函数Omegonprocam_put_Option来设置RGB的bits数. 请注意相机必须处于非运行状态才能修改此设置.

## d. 白平衡和自动白平衡: Temp/Tint模式 vs RGB Gain模式

1. Omegonprocam支持互相独立的两种模式描述白平衡: a) Temp/Tint模式; b) RGB Gain模式

> a) 默认是Temp/Tint模式, 在本模式下, 使用Temp, Tint这2个参数来控制白平衡. Omegonprocam_get_TempTint获取值, Omegonprocam_put_TempTint设置值. Omegonprocam_AwbOnce执行自动白平衡. 当白平衡参数改变时, 发送OMEGONPROCAM_EVENT_TEMPTINT通知消息.

> b) 在RGB Gain模式下, 使用3个通道的Gain值来控制白平衡. Omegonprocam_get_WhiteBalanceGain获取值, Omegonprocam_put_WhiteBalanceGain设置值. Omegonprocam_AwbInit执行自动白平衡. 当白平衡参数改变时, 发送OMEGONPROCAM_EVENT_WBGAIN通知消息.

> 两种模式下使用的函数不能混淆:

> > a) Temp/Tint模式下, 必须使用Omegonprocam_get_TempTint和Omegonprocam_put_TempTint和Omegonprocam_AwbOnce. 而Omegonprocam_get_WhiteBalanceGain和Omegonprocam_put_WhiteBalanceGain和Omegonprocam_AwbInit不能使用, 永远返回E_NOTIMPL.
> > b) RGB Gain模式下, 必须使用Omegonprocam_get_WhiteBalanceGain和Omegonprocam_put_WhiteBalanceGain和Omegonprocam_AwbInit. 而Omegonprocam_get_TempTint和Omegonprocam_put_TempTint和Omegonprocam_AwbOnce不能使用, 永远返回E_NOTIMPL

> 两种模式在相机打开的时候指定, 除非关闭相机重新打开, 一旦指定就不能更改. 参阅这里.

2. 自动白平衡功能, 业界有两种模式, 一种是连续自动白平衡,一种是触发式自动白平衡(once). 连续自动白平衡功能会一直进行白平衡参数的计算, 触发模式只是在触发的时候才会计算白平衡参数. Omegonprocam使用触发式白平衡计算方法, 因为这种方法在显微镜等领域更加合适和精确. 连续自动白平衡在某些场景情况下会出现错误.

3. 黑白相机不支持白平衡. 以上提到的函数一直返回E_NOTIMPL.

## e. 触发模式

1. 什么是触发

> Omegonprocam相机拥有2中工作模式: 视频模式和触发模式. 当处于触发模式时, 只有触发条件满足的情况下才能获取图像. 根据触发源有2种类型的触发类型: 外部触发, 软件触发.

2. 触发和Snap（静态图像抓拍）的区别

> 触发模式被设计用来精确控制相机当且仅当触发条件满足时才能获取图像. 用户可以通过控制预设的触发条件获取图像. 当进入触发模式时, 直到触发条件被满足才能得到图像. 图像的分辨率没有改变. Snap(静态图像抓拍)是用来在视频模式下抓取相同或者不同分辨率的图像.

3. 软件触发

> 相机可以被软件触发. 在软件触发模式下, 通过软件来控制触发条件. 图像的张数也可以软件控制.

4. 外部触发

> 相机可以被外部信号触发. 当前仅支持上升沿触发模式.

5. 混合触发

> 外部触发+软件触发同时启用.

6. 模拟触发

> 对于既不支持软件触发又不支持外部触发的相机, 可以使用模拟触发. 当处于模拟触发模式时, 相机硬件的工作模式和视频模式下的工作模式没有区别, 但是上层软件不发起抓取动作, 软件内部的缓冲区保持为空, 直到用户设置触发条件.

7. 怎样进入触发模式

> 枚举相机时, 可以得到相机型号的能力标志位, 查看相机对于触发模式的支持能力, 定义如下:

> >     #define OMEGONPROCAM_FLAG_TRIGGER_SOFTWARE   0x00080000  /* 支持软触发 */
> >     #define OMEGONPROCAM_FLAG_TRIGGER_EXTERNAL   0x00100000  /* 支持外部触发 */
> >     #define OMEGONPROCAM_FLAG_TRIGGER_SINGLE     0x00200000  /* 仅支持单张触发: 一次触发得到一张图像 */

> 可以使用函数Omegonprocam_put_Option(HOmegonprocam h, unsigned iOption, int iValue)设置相机的触发模式, 其中iOption参数为OMEGONPROCAM_OPTION_TRIGGER, iValue用于设置触发模式的类型. 请参阅以下内容:

> >     #define OMEGONPROCAM_OPTION_TRIGGER   0x0b    /* 0 = 视频模式, 1 = 软件或模拟触发模式, 2 = 外部触发模式, 3 = 外部触发+软件触发模式；默认值 = 0 */

> 函数Omegonprocam_get_Option(HOmegonprocam h, unsigned iOption, int* piValue)可以用来获取当前相机的触发模式类型.

8. 怎样触发相机

> 使用函数Omegonprocam_Trigger(HOmegonprocam h, unsigned short nNumber). 不同的nNumber的含义:

> > nNumber = 0 取消触发.
> > nNumber = 0xFFFF 一直触发, 类似于视频模式;
> > nNumber = 其他合法值代表单次触发获取的图片张数.

> 如果OMEGONPROCAM_FLAG_TRIGGER_SINGLE标志位是设置的, 那么nNumber参数只能为1, 意味着单次触发只能获取单张图片.
> 在调用Omegonprocam_Trigger函数之前, 相机必须已经处于触发模式.

9. 触发超时

> 超时时间建议不少于(曝光时间 * 102% + 4秒).

## f. 线程安全

采用一种中性自然策略(类似C++标准库), 意味着:

> a) 从多个线程读取单个相机对象是线程安全的. 例如, 给定一个相机对象A, 同时从线程1和线程2读取A是安全的.

> b) 如果一个线程正在写入一个相机对象, 则同一线程或其他线程上对该对象的所有读取和写入都必须受到保护. 例如, 给定一个相机对象A, 如果线程1正在写A, 则必须阻止线程2读取或写入A.

> c) 即使某线程正在读取或写入某相机对象, 其它线程读取和写入另外一个不同的相机对象是安全的. 例如, 给定相机对象A和B, 当线程1写入A, 线程2读取或写入B, 这是安全的.

# 4. 函数

- ## HRESULT返回值

  HRESULT在Windows平台上的使用很普遍. macOS, Linux和Android平台上借用之, 定义如下:

  请注意, 返回值>=0都表示成功(特别地S_FALSE也是成功, 但和S_OK有区别, 比如内部值和用户设置的值已经一致, 相当于空操作). 所以, 一般情况下应该使用SUCCEEDED和FAILED宏来判断返回值是成功或者失败.
  (除非有特殊需要, 不要使用"==S_OK"或"==0"来判断返回值)

  名称 | 说明 | 备注 | 值
  S_OK | Success (成功) |  | 0x00000000
  S_FALSE | Yet another success | 成功, 但和S_OK有所区别, 比如内部值和用户设置的值已经一致, 相当于空操作 | 0x00000001
  E_ACCESSDENIED | Permission denied (权限被拒绝) | Linux下程序没有权限打开USB设备, 请启用udev rules文件或以root运行 | 0x80070005
  E_INVALIDARG | One or more arguments are not valid (参数错误) |  | 0x80070057
  E_NOTIMPL | Not supported or not implemented (功能不支持或未实现) | 本型号相机不支持该功能 | 0x80004001
  E_POINTER | Pointer that is not valid (无效指针) | 指针为NULL | 0x80004003
  E_UNEXPECTED | Catastrophic failure (灾难性故障) | 一般表示条件不符合, 如相机运行状态时调用put_Option设置某些不支持运行时修改的选项等等 | 0x8000ffff
  E_WRONG_THREAD | Call function in the wrong thread (在错误的线程上下文中调用函数) | 请参阅这里, 这里, 这里 | 0x8001010e
  E_GEN_FAILURE | Device not functioning (设备不响应) | 一般由硬件错误引起, 如线缆问题, USB口问题, 接触不良, 相机硬件损坏等等 | 0x8007001f
  E_BUSY | The requested resource is in use (请求的资源在使用中) | 相机已经被占用, 如重复打开/启动相机, 或被其它程序使用中等等 | 0x800700aa
  E_PENDING | The data necessary to complete this operation is not yet available (没有数据) | 暂时没有数据可供获取 | 0x8000000a
  E_TIMEOUT | This operation returned because the timeout period expired (操作超时) |  | 0x8001011f
  E_FAIL | Unspecified failure (未指定的错误) |  | 0x80004005

      #define SUCCEEDED(hr)   (((HRESULT)(hr)) >= 0)
      #define FAILED(hr)      (((HRESULT)(hr)) < 0)

  在windows平台上, 这些HRESULT常量已经在系统头文件中定义过. 在其它平台上, 如果需要使用这些常量, 可以在#include "omegonprocam.h"之前#define OMEGONPROCAM_HRESULT_ERRORCODE_NEEDED. 如下所示:

      #define OMEGONPROCAM_HRESULT_ERRORCODE_NEEDED
      #include "omegonprocam.h"

- ## 调用规范(Calling Convention)

  在Win平台使用__stdcall, 请参阅这里

  在macOS, Linux和Android使用__cdecl

- ## 回调函数: POMEGONPROCAM_EVENT_CALLBACK和POMEGONPROCAM_DATA_CALLBACK_V4/V3

  这些回调函数是从omegonprocam.dll的内部线程上下文中回调出来, 所以, 非常有必要关注多线程问题. 请尽量保持回调函数代码的简洁, 并且快速返回.
  回调模式下, 如果POMEGONPROCAM_EVENT_CALLBACK回调函数复杂, 可以设置OMEGONPROCAM_OPTION_CALLBACK_THREAD, 使用专门的线程用于回调.

  由于执行以下操作时必须等待回调函数返回, 回调函数上下文有以下限制:
  (a)不要在回调函数上下文调用Omegonprocam_Stop或Omegonprocam_Close函数, 否则, 会死锁.
  (b)不要在回调函数上下文调用Omegonprocam_put_Option设置OMEGONPROCAM_OPTION_TRIGGER, OMEGONPROCAM_OPTION_BITDEPTH, OMEGONPROCAM_OPTION_PIXEL_FORMAT, OMEGONPROCAM_OPTION_BINNING, OMEGONPROCAM_OPTION_ROTATE, 否则返回E_WRONG_THREAD.
  (c)不要在回调函数上下文调用Omegonprocam_put_Roi, 否则返回E_WRONG_THREAD.
  (d)如果执行以上操作时和回调函数时试图获取同一把锁, 会导致永远等待回调结束, 死锁

- ## 坐标

  类似Omegonprocam_put_Roi, Omegonprocam_put_AEAuxRect等等这类带有坐标参数的, 其坐标永远是相对原始分辨率而言的, 即使视频已经执行过旋转, Flip, ROI, 数字Binning或它们的任意组合.

  如果视频是倒置的(参考这里), 则矩形坐标也必须倒置.

- ## Omegonprocam_EnumV2
  Omegonprocam_EnumWithName

  返回值：非负整数, 枚举到的相机数目

  参数：OmegonprocamDeviceV2数组缓冲区

  说明：调用该函数枚举计算机上当前插上的Omegonprocam相机. 函数返回时, OmegonprocamDeviceV2缓冲区包含有枚举到的每个相机实例的信息. 如果不关心多个相机同时联入电脑的情况的话, 调用本函数枚举相机实例是可选的.

  (1). 如下面的代码片段：

      OmegonprocamDeviceV2 arr[OMEGONPROCAM_MAX];
      unsigned cnt = Omegonprocam_EnumV2(arr);
      for (unsigned i = 0; i < cnt; ++i)
          ......

      typedef struct{
      #ifdef _WIN32
          const wchar_t*     name;     /* model name */
      #else
          const char*        name;
      #endif
          unsigned long long flag;     /* OMEGONPROCAM_FLAG_xxx */
          unsigned           maxspeed; /* maximum speed level, Omegonprocam_get_MaxSpeed, the speed range = [0, maxspeed], closed interval */
          unsigned           preview;  /* number of preview resolution, Omegonprocam_get_ResolutionNumber */
          unsigned           still;    /* number of still resolution, Omegonprocam_get_StillResolutionNumber */
          unsigned           maxfanspeed; /* maximum fan speed */
          unsigned           ioctrol;     /* number of input/output control */
          float              xpixsz;      /* physical pixel size in micrometer */
          float              ypixsz;      /* physical pixel size in micrometer */
          OmegonprocamResolution  res[OMEGONPROCAM_MAX];
      }OmegonprocamModelV2; /* device model v2 */

      typedef struct {
      #if defined(_WIN32)
          wchar_t  displayname[64];    /* 显示名称: 型号名称或用户指定的自定义名称(如果有并且使用Omegonprocam_EnumWithName, 使用Omegonprocam_EnumV2永远返回型号名称) */
          wchar_t  id[64];             /* unique and opaque id of a connected camera, for Omegonprocam_Open */
      #else
          char     displayname[64];    /* 显示名称: 型号名称或用户指定的自定义名称(如果有并且使用Omegonprocam_EnumWithName, 使用Omegonprocam_EnumV2永远返回型号名称) */
          char     id[64];             /* unique and opaque id of a connected camera, for Omegonprocam_Open */
      #endif
          const OmegonprocamModelV2* model;
      } OmegonprocamDeviceV2; /* device instance for enumerating */

  name | 型号名称
  flag | 位标记 (Bitwise flag)
  OMEGONPROCAM_FLAG_CMOS | cmos传感器
  OMEGONPROCAM_FLAG_CCD_PROGRESSIVE | 逐行ccd传感器
  OMEGONPROCAM_FLAG_CCD_INTERLACED | 隔行ccd传感器
  OMEGONPROCAM_FLAG_ROI_HARDWARE | 支持硬件ROI. 所谓硬件ROI和软件ROI, 前者设置sensor的工作参数, 从sensor读取的数据减少(从而提高帧率); 后者不改变sensor的工作参数, 从sensor读取的数据量不变, 上层软件把原始图像剪切到目标ROI矩形大小.
  OMEGONPROCAM_FLAG_MONO | 黑白传感器
  OMEGONPROCAM_FLAG_BINSKIP_SUPPORTED | 支持bin/skip模式, 请参考Omegonprocam_put_Mode和Omegonprocam_get_Mode
  OMEGONPROCAM_FLAG_USB30 | USB3.0
  OMEGONPROCAM_FLAG_TEC | TEC制冷相机
  OMEGONPROCAM_FLAG_USB30_OVER_USB20 | usb3.0 相机被插入usb2.0端口
  OMEGONPROCAM_FLAG_ST4 | 支持ST4端口
  OMEGONPROCAM_FLAG_GETTEMPERATURE | 支持读取温度, Omegonprocam_get_Temperature
  OMEGONPROCAM_FLAG_HIGH_FULLWELL | 支持高满阱模式
  OMEGONPROCAM_FLAG_RAW10 | OMEGONPROCAM_PIXELFORMAT_RAW10 Pixel format, RAW 10 bits
  OMEGONPROCAM_FLAG_RAW11 | OMEGONPROCAM_PIXELFORMAT_RAW11 Pixel format, RAW 11 bits
  OMEGONPROCAM_FLAG_RAW12 | OMEGONPROCAM_PIXELFORMAT_RAW12 Pixel format, RAW 12 bits
  OMEGONPROCAM_FLAG_RAW12PACK | OMEGONPROCAM_PIXELFORMAT_RAW12PACK Pixel format, RAW 12 bits, packed
  OMEGONPROCAM_FLAG_RAW14 | OMEGONPROCAM_PIXELFORMAT_RAW14 Pixel format, RAW 14 bits
  OMEGONPROCAM_FLAG_RAW16 | OMEGONPROCAM_PIXELFORMAT_RAW16 Pixel format, RAW 16 bits
  OMEGONPROCAM_FLAG_FAN | 支持制冷风扇
  OMEGONPROCAM_FLAG_TEC_ONOFF | TEC制冷装置支持开启/关闭, TEC制冷的目标温度, 见： OMEGONPROCAM_OPTION_TEC OMEGONPROCAM_OPTION_TECTARGET
  OMEGONPROCAM_FLAG_ISP | 支持硬件ISP (Image Signal Processing), 降低CPU进行图像处理时的CPU利用率
  OMEGONPROCAM_FLAG_TRIGGER_SOFTWARE | 支持软件触发模式
  OMEGONPROCAM_FLAG_TRIGGER_EXTERNAL | 支持外触发模式
  OMEGONPROCAM_FLAG_TRIGGER_SINGLE | 只支持单帧触发模式, 单次触发只能获取一张图片.
  OMEGONPROCAM_FLAG_BLACKLEVEL | 支持设置和获取
  OMEGONPROCAM_FLAG_FOCUSMOTOR | 支持对焦马达
  OMEGONPROCAM_FLAG_AUTO_FOCUS | 支持自动对焦
  OMEGONPROCAM_FLAG_BUFFER | 帧缓冲
  OMEGONPROCAM_FLAG_CG | 转换增益(Conversion Gain): LCG, HCG
  OMEGONPROCAM_FLAG_CGHDR | 转换增益(Conversion Gain): LCG, HCG, HDR
  OMEGONPROCAM_FLAG_DDR | 使用超大容量DDR(Double Data Rate SDRAM)作帧缓冲, 容量不少于一个完整帧
  OMEGONPROCAM_FLAG_EVENT_HARDWARE | 硬件事件(如曝光开始、停止等等). 参阅这里和这里
  OMEGONPROCAM_FLAG_YUV411 | OMEGONPROCAM_PIXELFORMAT_YUV411 Pixel format
  OMEGONPROCAM_FLAG_YUV422 | OMEGONPROCAM_PIXELFORMAT_YUV422 Pixel format
  OMEGONPROCAM_FLAG_YUV444 | OMEGONPROCAM_PIXELFORMAT_YUV444 Pixel format
  OMEGONPROCAM_FLAG_RGB888 | OMEGONPROCAM_PIXELFORMAT_RGB888 Pixel format
  OMEGONPROCAM_FLAG_RAW8 | OMEGONPROCAM_PIXELFORMAT_RAW8 Pixel format, RAW 8 bits
  OMEGONPROCAM_FLAG_GMCY8 | OMEGONPROCAM_PIXELFORMAT_GMCY8 Pixel format, GMCY 8 bits
  OMEGONPROCAM_FLAG_GMCY12 | OMEGONPROCAM_PIXELFORMAT_GMCY12 Pixel format, GMCY 12 btis
  OMEGONPROCAM_FLAG_GLOBALSHUTTER | 全局快门
  OMEGONPROCAM_FLAG_PRECISE_FRAMERATE | 支持精确帧率和带宽, 参阅OMEGONPROCAM_OPTION_PRECISE_FRAMERATE和OMEGONPROCAM_OPTION_BANDWIDTH
  OMEGONPROCAM_FLAG_HEAT | 支持加热去雾, 参阅OMEGONPROCAM_OPTION_HEAT和OMEGONPROCAM_OPTION_HEAT_MAX
  OMEGONPROCAM_FLAG_LOW_NOISE | 支持低噪声模式(更高的信噪比,更低的帧率). 参阅OMEGONPROCAM_OPTION_LOW_NOISE
  OMEGONPROCAM_FLAG_LEVELRANGE_HARDWARE | 支持硬件Level range
  OMEGONPROCAM_FLAG_GIGE | 1 Gigabit GigE
  OMEGONPROCAM_FLAG_10GIGE | 10 Gigabit GigE
  OMEGONPROCAM_FLAG_5GIGE | 5 Gigabit GigE
  OMEGONPROCAM_FLAG_25GIGE | 2.5 Gigabit GigE
  OMEGONPROCAM_FLAG_CAMERALINK | camera link
  OMEGONPROCAM_FLAG_CXP | CXP: CoaXPress
  OMEGONPROCAM_FLAG_FILTERWHEEL | 天文滤镜轮
  OMEGONPROCAM_FLAG_AUTOFOCUSER | 天文电调焦
  OMEGONPROCAM_FLAG_LIGHTSOURCE | 嵌入式光源控制
  OMEGONPROCAM_FLAG_LIGHT_SOURCE | 独立式光源
  OMEGONPROCAM_FLAG_GHOPTO | ghopto sensor(不支持增益, 转换增益支持高/中/低三种)
  maxspeed | 最大速度等级, 和函数Omegonprocam_get_MaxSpeed返回值相同. 速度范围是[0, maxspeed]. 可以通过Omegonprocam_put_Speed设置速度等级, Omegonprocam_get_Speed获取当前速度等级
  preview | 预览分辨率的个数. 和函数Omegonprocam_get_ResolutionNumber返回值相同
  still | 静态抓拍分辨率个数, 0表示不支持静态抓拍. 和函数Omegonprocam_get_StillResolutionNumber返回值相同
  ioctrol | IO控制的数目
  xpixsz ypixsz | 物理像元大小(微米), 见Omegonprocam_get_PixelSize
  res | 分辨率宽度和高度

  (2) 安卓平台上, 如果枚举不到相机, 有可能是NDK被限制了枚举USB设备的权限. 请参与这里.

- ## Omegonprocam_HotPlug

  返回值：无

  参数：

  > POMEGONPROCAM_HOTPLUG funHotPlug: 回调函数

  > > typedef void (*POMEGONPROCAM_HOTPLUG)(void* ctxHotPlug);

  > void* ctxHotPlug: 回调函数上下文

  说明：

  > 本函数只存在于macOS, Linux平台. 处理设备插入/拔出通知:

  > - 在Android平台, 请参阅这里
  > - 在Linux和macOS平台, 如果需要处理设备插入/拔出通知, 调用本函数注册回调函数. 当设备被插入/拔出时时, 程序通过回调函数得到通知, 然后调用Omegonprocam_EnumV2重新枚举设备即可.
  > - 在macOS平台下也可以使用IONotificationPortCreate系列API.

- ## Omegonprocam_GigeEnable

  返回值： HRESULT类型表示成功或失败

  参数：

  > POMEGONPROCAM_HOTPLUG funHotPlug：回调函数, 用于通知GigE相机上线/下线. 如果不需要相机上下线通知, 回调函数可以设为NULL.

  > void* ctxHotPlug: 回调函数上下文

  说明：初始化对GigE相机的支持, 只需要在进程启动时调用一次即可.

- ## Omegonprocam_Open

  返回值：相机句柄. 失败时返回NULL（如设备被突然拔出等等）

  参数：Omegonprocam相机实例, 由Omegonprocam_EnumV2枚举得到.如果camId是NULL则自动打开第一个相机, 所以, 如果不关心多个相机实例同时连入电脑的情况, Omegonprocam_EnumV2不是必须的, 直接传入参数NULL打开唯一的相机实例.

  说明：打开相机实例.

  (1) 在camId后面支持附着一些额外参数(用分号;分割, 区分大小写), 如:

  > Omegonprocam_Open(L"\\?\usb#vid_0547&pid_1134#d&397c94f3&0&3;registry=;wb=rgb"))

  见下表:

  相机配置 | 不添加额外参数, 表示不需要相机配置的保存和加载功能. 添加参数, 相机打开时自动加载指定参数, 相机停止时自动保存参数.
  注册表(Windows only) | ;registry=xxxx\yyyy | 指定使用注册表HKEY_CURRENT_USER下的相对路径. 如果等号后面为空, 则使用注册表的默认位置: Software\XXX(公司名称)\capi\YYY(相机型号名称)
  ;ini=x:\yyyy\zzzz.ini | ini文件 | 使用文件x:\yyyy\zzzz.ini. 必须使用完整路径, 等号后面不能为空. 请确保目标目录存在并可读可写
  ;json=x:\yyyy\zzzz.json | json文件 | 使用文件x:\yyyy\zzzz.json. 必须使用完整路径, 等号后面不能为空. 请确保目标目录存在并可读可写
  ;eeprom=xxxx | EEPROM | 使用EEPROM, 开始地址xxxx. 如果等号后面为空, 表示开始地址为0
  白平衡模式 | ;wb=temptint or rgb | Temp/Tint模式或RGB Gain模式, 见这里 默认Temp/Tint
  USB块大小 | ;usbblocksize=xxx | 百分数, 范围:10~1000, 表示10%~1000%
  linux平台上的零拷贝 | ;zerocopy=1或0 | 有利于减少内存拷贝, 提高效率. 要求Kernel版本>=4.6并且硬件平台支持. 如果图像出错, 表示该硬件平台不支持本特性, 请禁用之. 默认在安卓或ARM上禁用, 在非安卓的x86/x64平台上启用.

  2. Android

  (a) 对于开放NDK枚举usb设备权限的安卓平台, 和普通流程一样, 没有任何区别.

  (b) 对于没有开放NDK枚举usb设备权限的安卓平台, 只有通过Java侧获取设备权限, 得到文件描述符传递给Omegonprocam_Open, 得到HOmegonprocam相机句柄之后的流程则没有区别. 如下:

      usbManager = (UsbManager)getApplicationContext().getSystemService(Context.USB_SERVICE);
      HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
      for (UsbDevice usbDevice : deviceList.values()) {
          ModelV2 model = omegonprocam.get_Model((short)usbDevice.getVendorId(), (short)usbDevice.getProductId()); //通过VID/PID获取相机型号, 返回null表示非支持的设备
          if (model != null) {
              usbManager.requestPermission(usbDevice, mPermissionIntent);                                     //获取权限
              UsbDeviceConnection usbDeviceConnection = usbManager.openDevice(camDevice);
              if (usbDeviceConnection != null) {
                  int fileDescriptor = usbDeviceConnection.getFileDescriptor();                               //得到文件描述符
                  omegonprocam cam = omegonprocam.Open(String.format("fd-%d-%04x-%04x", fileDescriptor, usbDevice.getVendorId(), usbDevice.getProductId())); //打开相机
                  usbDeviceConnection.close();                                                                //Java侧的usb连接不再需要, 强烈建议马上明确地关闭
                  if (cam != null) {
                      ... //得到omegonprocam对象之后的流程则没有区别, 正常使用即可
                  }
              }
          }
      }

  3. Omegonprocam_Open/Close, Start/Stop是相对繁重的调用, 除非必要, 不推荐频繁操作.

- ## Omegonprocam_Close

  返回值：无

  参数：

  > HOmegonprocam h：相机句柄

  说明：关闭相机实例. 句柄关闭之后, 请不要再使用之.

- ## Omegonprocam_StartPullModeWithWndMsg
  Omegonprocam_StartPullModeWithCallback

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > HWND hWnd: 事件发生时, 消息将Post到这个窗口

  > UINT nMsg: Windows自定义消息类型. 消息的WPARAM参数是事件类型OMEGONPROCAM_EVENT_xxxx, LPARAM参数不用（恒等于0）

  > POMEGONPROCAM_EVENT_CALLBACK funEvent, void* ctxEvent：用户程序指定的回调函数和回调上下文参数.

  > > typedef void (*POMEGONPROCAM_EVENT_CALLBACK)(unsigned nEvent, void* ctxEvent);

  > 请参阅这里.

  说明：很明显, Omegonprocam_StartPullModeWithWndMsg只支持Windows系统

- ## Omegonprocam_PullImageV3
  Omegonprocam_WaitImageV3
  Omegonprocam_PullImageV2
  Omegonprocam_PullStillImageV2
  Omegonprocam_PullImageWithRowPitchV2
  Omegonprocam_PullStillImageWithRowPitchV2
  Omegonprocam_PullImage
  Omegonprocam_PullStillImage
  Omegonprocam_PullImageWithRowPitch
  Omegonprocam_PullStillImageWithRowPitch

  返回值： HRESULT类型表示成功或失败, 不存在图像可供获取时返回E_PENDING

  参数：

  > HOmegonprocam h：相机句柄

  > nWaitMS: 超时值(毫秒). 如果指定非零值, 则该函数或者成功获取图像或者等待超时. 如果nWaitMS为零, 则没有图像可供获取时, 函数不会等待; 它总是立即返回; 相当于Omegonprocam_PullImageV3.

  > void* pImageData：数据缓冲区. 用户应用程序必须确保改缓冲区足够大以容纳图像数据. 缓冲区大小必须 >= rowPitch * nHeight

  > int bStill: 静态图像填1, 其它填0

  > int bits：图像颜色位数, 支持24, 32, 48, 8, 16和64, 分别代表RGB24, RGB32, RGB48, 8位灰度, 16位灰度, RGB64图像. bits = 0表示使用基于OMEGONPROCAM_OPTION_RGB的默认值. 本参数在RAW模式下没有意义, 被忽略

  > int rowPitch: 行间距(Stride, 跨距), 行与行之间的间距, =0表示默认使用行间距, =-1表示最小行间距(零填充)

  > unsigned* pnWidth, unsigned* pnHeight：输出参数, 图像的宽度高度

  > OmegonprocamFrameInfoV3/V2* pInfo：输出参数, 本帧图像Info:

  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_SEQ          0x0001 /* 帧序号, frame sequence number */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_TIMESTAMP    0x0002 /* 时间戳, timestamp */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_EXPOTIME     0x0004 /* 曝光时间, exposure time */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_EXPOGAIN     0x0008 /* 曝光增益, exposure gain */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_BLACKLEVEL   0x0010 /* 暗电平, black level */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_SHUTTERSEQ   0x0020 /* 触发序号, sequence shutter counter */
  >     #define OMEGONPROCAM_FRAMEINFO_FLAG_STILL        0x8000 /* 静态图片, still image */

  >     typedef struct {
  >         unsigned            width;      /* 图像宽度, 一直有效 */
  >         unsigned            height;     /* 图像高度, 一直有效 */
  >         unsigned            flag;       /* OMEGONPROCAM_FRAMEINFO_FLAG_xxxx, flag置bit位, 代表对应的值有效, 取决于相机型号 */
  >         unsigned            seq;        /* 帧序列号, frame sequence number */
  >         unsigned long long  timestamp;  /* 帧时间戳, 单位微秒 */
  >         unsigned            shutterseq; /* 触发序号, sequence shutter counter */
  >         unsigned            expotime;   /* 曝光时间 */
  >         unsigned short      expogain;   /* 曝光增益 */
  >         unsigned short      blacklevel; /* 暗电平, black level */
  >     } OmegonprocamFrameInfoV3;

  > 注: 除了图像宽度高度总是有效以外, 其它都取决于相机型号底层硬件是否支持. 通过判断相应的flag bit位是否设置来判断对应值是否有效.

  说明：当pImageData为NULL而pInfo, pnWidth, pnHeight参数不为NULL的时候, 可以获取(Peek)是否存在图像以及图像的宽度高度等元信息.

  > (a) 当bits和OMEGONPROCAM_OPTION_RGB不一致时, 将不得不进行格式转换, 造成损失效率. 见以下bits和OMEGONPROCAM_OPTION_RGB对应表:

  > OMEGONPROCAM_OPTION_RGB | 0 (RGB24) | 1 (RGB48) | 2 (RGB32) | 3 (Grey8) | 4 (Grey16) | 5 (RGB64)
  > bits = 0 | 24 | 48 | 32 | 8 | 16 | 64
  > bits = 24 | 24 | NA | 转换至24 | 转换至24 | NA | NA
  > bits = 32 | 转换至32 | NA | 32 | 转换至32 | NA | NA
  > bits = 48 | NA | 48 | NA | NA | 转换至48 | 转换至48
  > bits = 8 | 转换至8 | NA | 转换至8 | 8 | NA | NA
  > bits = 16 | NA | 转换至16 | NA | NA | 16 | 转换至16
  > bits = 64 | NA | 转换至64 | NA | NA | 转换至64 | 64

  > (b) 请保证pImageData缓冲区的大小足够容纳整帧数据, 请看下表:

  > 格式 | 0表示默认行间距(跨距) | -1表示最小行间距(零填充)
  > RGB | RGB24 | TDIBWIDTHBYTES(24 * Width) | Width * 3
  > RGB32 | Width * 4 | Width * 4
  > RGB48 | TDIBWIDTHBYTES(48 * Width) | Width * 6
  > GREY8灰度图像 | TDIBWIDTHBYTES(8 * Width) | Width
  > GREY16灰度图像 | TDIBWIDTHBYTES(16 * Width) | Width * 2
  > RGB64 | Width * 8 | Width * 8
  > RAW | 8bits模式 | Width | Width
  > 10bits, 12bits, 14bits, 16bits模式 | Width * 2 | Width * 2

  > #ifndef TDIBWIDTHBYTES #define TDIBWIDTHBYTES(bits) ((unsigned)(((bits) + 31) & (~31)) / 8) #endif

- ## Omegonprocam_StartPushModeV4
  Omegonprocam_StartPushModeV3

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > funData, ctxData：用户程序指定的回调函数和回调上下文参数. omegonprocam.dll内部从相机得到的图像数据后, 会回调该函数.

  > funEvent, ctxEvent: 事件回调函数和回调上下文参数.

  > typedef void (*POMEGONPROCAM_DATA_CALLBACK_V4)(const void* pData, const OmegonprocamFrameInfoV3* pInfo, int bSnap, void* ctxData);
  > typedef void (*POMEGONPROCAM_DATA_CALLBACK_V3)(const void* pData, const OmegonprocamFrameInfoV2* pInfo, int bSnap, void* ctxData);

  > 请参阅这里.

  > 如果回调时, pData参数==NULL, 表示发生内部错误（如相机被突然拔出等等）.
  > 数据pData的行间距(row pitch, stride, 跨距)是默认值.
  > int bSnap参数, TRUE表示是由Omegonprocam_Snap或Omegonprocam_SnapN函数发起的图片抓拍, FALSE表示普通的预览图片（视频）.

  说明：开启相机实例.

- ## Omegonprocam_Stop

  返回值： HRESULT类型表示成功或失败

  参数：相机句柄

  说明：停止相机实例. 停止之后, 可以调用Omegonprocam_StartPushModeV4/V3重新开启. 比如切换视频分辨率：

  > 步骤1：调用Omegonprocam_Stop停止

  > 步骤2：调用Omegonprocam_put_Size或者Omegonprocam_put_eSize设置新分辨率

  > 步骤3：调用Omegonprocam_StartXXXX(如Omegonprocam_StartPullModeWithWndMsg, Omegonprocam_StartPullModeWithCallback, Omegonprocam_StartPushModeV4/V3等等)重新开启

- ## Omegonprocam_Pause

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h: 相机句柄

  > int bPause: 1 => 暂停, 0 => 继续

  说明：暂停或者继续视频流

- ## Omegonprocam_SnapN
  Omegonprocam_SnapR
  Omegonprocam_Snap

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：想要抓拍的分辨率序号. 0xffffffff表示使用当前预览分辨率.

  > unsigned nNum: 抓拍图像张数.

  说明：抓拍“静态”图片, 请参阅这里. 抓拍成功之后, 如果是Push Mode, 则通过OMEGONPROCAM_EVENT_STILLIMAGE通知. 如果是Push Mode则通过POMEGONPROCAM_DATA_CALLBACK_V4/V3回调函数返回, 其中回调函数的参数BOOL bSnap设为TRUE.

  > 有些相机支持在预览视频的不间断的情况下, 抓拍单张的不同于正在视频预览的分辨率的所谓静态图片. 例如UCMOS03100KPA, 正在预览的分辨率是1024*768, 调用Omegonprocam_Snap(h, 0)抓拍单张第0号分辨率（2048*1536）的图片.预览使用小分辨率（追求更快的帧率）, 抓拍使用大分辨率（追求更好的图片质量）. 这种行为, 称之为“静态抓拍”.
  > 对于不支持静态抓拍的相机型号, 则参数nResolutionIndex的值必须等于当前正在预览的分辨率, 否则, 函数返回E_UNEXPECTED.
  > 某个型号是否支持静态抓拍能力, 参见OmegonprocamModelV2的still域(大于0).

  > Omegonprocam_SnapR用于抓拍"RAW"图像, 对于支持硬件ISP的相机, 跳过ISP的影响.

  > Omegonprocam_Snap(h, index) == Omegonprocam_SnapN(h, index, 1)

- ## Omegonprocam_Trigger

  返回值： HRESULT类型表示成功或失败.

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short nNumber: 0xffff(一直触发),0(取消触发), 其他值(触发图片的张数)

  说明：触发模式下, 调用本函数进行软件触发. 触发成功之后, 如果是Pull Mode, 则通过OMEGONPROCAM_EVENT_IMAGE通知. 如果是Push Mode则通过POMEGONPROCAM_DATA_CALLBACK_V4/V3回调函数返回, 其中回调函数的参数BOOL bSnap设为FALSE.

- ## Omegonprocam_TriggerSync

  返回值： HRESULT类型表示成功或失败.

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nWaitMS: 超时值(毫秒). 如果nWaitMS为零, 表示使用默认值(曝光时间 * 102% + 4000毫秒), 0xffffffff表示永久等待, 其它值表示具体毫秒数

  > void* pImageData：数据缓冲区. 用户应用程序必须确保改缓冲区足够大以容纳图像数据. 缓冲区大小必须 >= rowPitch * nHeight

  > int bits：图像颜色位数, 支持24, 32, 48, 8, 16和64, 分别代表RGB24, RGB32, RGB48, 8位灰度, 16位灰度, RGB64图像. bits = 0表示使用基于OMEGONPROCAM_OPTION_RGB的默认值. 本参数在RAW模式下没有意义, 被忽略

  > int rowPitch: 行间距(Stride, 跨距), 行与行之间的间距, =0表示默认使用行间距, =-1表示最小行间距(零填充)

  > OmegonprocamFrameInfoV3* pInfo：输出参数, 本帧图像Info

  说明：触发模式下, 调用本函数进行单次软件触发, 并等待图像到达.

- ## Omegonprocam_put_Size
  Omegonprocam_get_Size
  Omegonprocam_put_eSize
  Omegonprocam_get_eSize

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：当前分辨率序号

  > int nWidth, int nHeight：当前分辨率的宽度高度

  说明：设置或者得到当前分辨率.

  > 设置分辨率应该在相机处于非运行状态下.
  > 有2种方法设置当前分辨率, 种是通过分辨率的序号, 一种是通过宽度/高度. 两种方法是等效的. 比如UCMOS03100KPA支持以下3种分辨率:
  > 序号0: 2048, 1536
  > 序号1: 1024, 768
  > 序号2: 680, 510
  > 所以Omegonprocam_put_Size(h, 1024, 768) or Omegonprocam_put_eSize(h, 1)效果一样.

- ## Omegonprocam_put_Size
  Omegonprocam_get_Size
  Omegonprocam_put_eSize
  Omegonprocam_get_eSize
  Omegonprocam_get_FinalSize

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：当前分辨率序号

  > int nWidth, int nHeight：当前分辨率的宽度高度

  说明：设置或者得到当前分辨率.

  > 设置分辨率应该在在相机处于非运行状态下.
  > 有2种方法设置当前分辨率, 一种是通过分辨率的序号, 一种是通过宽度/高度. 两种方法是等效的. 比如UCMOS03100KPA支持以下3种分辨率:
  > 序号0: 2048, 1536
  > 序号1: 1024, 768
  > 序号2: 680, 510
  > 所以Omegonprocam_put_Size(h, 1024, 768) or Omegonprocam_put_eSize(h, 1)效果一样.

  > Omegonprocam_get_FinalSize获取(经过ROI, Binning, 旋转, 等等之后)图像的最终宽度高度.

- ## Omegonprocam_put_Roi
  Omegonprocam_get_Roi

  返回值： HRESULT类型表示成功或失败.

  参数：

  > HOmegonprocam h: 相机句柄

  > unsigned xOffset: x偏移, 必须是偶数, 否则返回E_INVALIDARG

  > unsigned yOffset: y偏移, 必须是偶数, 否则返回E_INVALIDARG

  > unsigned xWidth: 宽度. 最小值16, 必须是偶数, 否则返回E_INVALIDARG

  > unsigned yHeight: 高度. 最小值16, 必须是偶数, 否则返回E_INVALIDARG

  说明: 设置/获取ROI. Omegonprocam_put_Roi(h, 0, 0, 0, 0)表示清除ROI恢复至原始尺寸.

  > 重要提示: 不允许在POMEGONPROCAM_EVENT_CALLBACK和POMEGONPROCAM_DATA_CALLBACK_V4/V3的回调上下文中调用Omegonprocam_put_Roi, 否则返回E_WRONG_THREAD.

  > 注意：坐标永远是相对原始分辨率而言的, 请参阅这里

  > 例外: UHCCD03100KPB, UHCCD05000KPA, UHCCD05100KPA的小分辨率不支持ROI功能, 函数返回值是E_NOTIMPL.

- ## Omegonprocam_get_ResolutionNumber
  Omegonprocam_get_Resolution
  Omegonprocam_get_ResolutionRatio

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：分辨率序号

  > int* pWidth, int* pHeight：宽度、高度

  说明：Omegonprocam_get_ResolutionNumber得到支持的分辨率个数（如UCMOS03100KPA返回3, 表示支持3种分辨率）. Omegonprocam_get_Resolution得到每种分辨率的高度/宽度.

  > 这些参数在Omegonprocam_EnumV2返回相机实例的OmegonprocamModelV2都已经包含.

  > Omegonprocam_get_ResolutionRatio获取分辨率的Binning数, 用分数表示, 如1/1, 1/2, 1/3等等.

- ## Omegonprocam_get_RawFormat

  返回值： HRESULT类型表示成功或失败.

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned* pFourCC：4种Bayer像素排列(MAKEFOURCC('G', 'B', 'R', 'G'), MAKEFOURCC('R', 'G', 'G', 'B'), MAKEFOURCC('B', 'G', 'G', 'R'), MAKEFOURCC('G', 'R', 'B', 'G'), 请参阅这里). 请注意, 不同软件定义Bayer时使用的坐标系Y轴方向可能不同(Y轴向上或向下), 所以互操作时有可能需要做一点映射. 如同一种像素排列, Y轴向下时Bayer是GRBG, Y轴向上则是BGGR.

  > unsigned* pBitsPerPixel：bitdepth, 如8, 10, 12, 14, 16

  > #ifndef MAKEFOURCC #define MAKEFOURCC(a, b, c, d) ((unsigned)(unsigned char)(a) | ((unsigned)(unsigned char)(b) << 8) | ((unsigned)(unsigned char)(c) << 16) | ((unsigned)(unsigned char)(d) << 24)) #endif

- ## Omegonprocam_get_PixelFormatSupport

  返回值: HRESULT类型表示成功或失败

  参数:

  > HOmegonprocam h: 相机句柄

  > char cmd:

  > > -1: 查询支持的Pixel Format数量
  > > 0~number: 查询第n条支持的Pixel Format的值

  > int* piValue: 输出, OMEGONPROCAM_PIXELFORMAT_xxxx, 参阅这里

- ## Omegonprocam_get_PixelFormatName

  返回值: Pixel Format名称, 如"RAW10", "HDR12HL"等等

  参数:

  > int val: OMEGONPROCAM_PIXELFORMAT_xxxx, 参阅这里

- ## Omegonprocam_put_Option
  Omegonprocam_get_Option

  返回值： HRESULT类型表示成功或失败.

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned iOption：选项, 见下表

  > int iValue：值, 见下表

  > 选项 | 说明 | 默认值 | 是否可以在相机处于运行状态设置该值 (调用Omegonprocam_StartXXXX之前或Omegonprocam_Stop之后)
  > OMEGONPROCAM_OPTION_RAW | 0表示使用RGB模式. 1表示RAW模式, 直接获取底层传感器数据. | 0 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_ISP | 启用/禁用硬件ISP: 0 => 自动 (RAW模式时禁用, 其它启用) 1 => 启用 -1 => 禁用 | 0(自动) | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_BITDEPTH | 一些型号的相机支持大于8Bits的位深度(bitdepth), 如10,12,14,16等. 0表示使用8Bits位深度. 1表示使用本相机支持的最高位深度 | 型号特定 | 是 (相对比较“重型”的操作, 不建议在相机处于运行状态时太频繁修改)
  > OMEGONPROCAM_OPTION_TRIGGER | 0 = 视频模式 1 = 软件或模拟触发模式 2 = 外部触发模式 3 = 外部触发和软件触发都开启 | 0 | 是

  > OMEGONPROCAM_OPTION_RGB

  > 0 = 使用RGB24
  > 1 = 在位深度>8时, 启用RGB48格式
  > 2 = 使用RGB32
  > 3 = 8位灰度(只对黑白相机有效)
  > 4 = 16位灰度(只对黑白相机并且位深度>8时有效)
  > 5 = 在位深度>8时, 启用RGB64格式

  > 0

  > 否
  > (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)

  > OMEGONPROCAM_OPTION_BYTEORDER | 字节序: 1: BGR 0: RGB | Win: 1 Linux/MacOS/Android: 0 | 是 (相对比较“重型”的操作, 不建议在相机处于运行状态时太频繁修改)
  > OMEGONPROCAM_OPTION_UPSIDE_DOWN | 倒置: 1: yes 0: no 请和Omegonprocam_put_VFlip区别, 后者需要耗费CPU对每帧数据执行数据搬动的工作 | Win: 1, Windows下默认倒置 Linux/MacOS/Android: 0, 默认不倒置 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_WBGAIN | 0 = 关闭内部白平衡增益 1 = 开启内部白平衡增益 | 1 | 是
  > OMEGONPROCAM_OPTION_FAN | 一些型号的相机支持制冷风扇. 0 = 关闭风扇 [1, max] = 风扇速率 设置为"-1"表示使用本型号的默认值 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_TEC | 一些型号的相机支持开启关闭TEC制冷装置. 0 = 关闭TEC制冷 1 = 开启TEC制冷 | 1 | 是
  > OMEGONPROCAM_OPTION_TECTARGET | 获取和设置TEC制冷的目标温度, 单位0.1℃. 例如, 125表示12.5℃, -35表示-3.5℃. 设置目标温度为"-2730"或以下表示使用本型号的默认值. | 型号特定 | 是
  > OMEGONPROCAM_OPTION_TECTARGET_RANGE | 获取TEC制冷的目标温度的范围, 单位0.1℃. 例如, 125表示12.5℃, -35表示-3.5℃. 最小值(low 16 bits) = (short)(val & 0xffff) 最大值(high 16 bits) = (short)((val >> 16) & 0xffff). | 型号特定 | 是
  > OMEGONPROCAM_OPTION_AUTOEXP_POLICY | 自动曝光策略: 0: 仅曝光 1: 曝光优先 2: 仅模拟增益 3: 模拟增益优先 | 1 | 是
  > OMEGONPROCAM_OPTION_AUTOEXP_THRESHOLD | 自动曝光阈值,范围: [2~15] | 5 | 是
  > OMEGONPROCAM_OPTION_FRAMERATE | 帧率限制（每秒帧数）. 触发模式下帧率控制自动禁用. | 0 (表示不限制) | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_BLACKLEVEL | 暗电平(Black Level) 对于不支持暗电平的相机返回E_NOTIMPL. | 0 | 是
  > OMEGONPROCAM_OPTION_MULTITHREAD | 多线程图像处理 | 1 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)

  > OMEGONPROCAM_OPTION_BINNING

  > 数字binning:
  > 0x01 (无binning)
  > n: (饱和加法, n*n), 0x02(2*2), 0x03(3*3), 0x04(4*4), 0x05(5*5), 0x06(6*6), 0x07(7*7), 0x08(8*8). 数据的Bitdepth保持不变.
  > 0x40 | n: (非饱和加法, n*n, 只在RAW模式下支持), 0x42(2*2), 0x43(3*3), 0x44(4*4), 0x45(5*5), 0x46(6*6), 0x47(7*7), 0x48(8*8). 数据的Bitdepth增加, 如Bitdepth为12的原始数据2*2 Binning之后Bitdepth增加2位变成14.
  > 0x80 | n: (平均, n*n), 0x82(2*2), 0x83(3*3), 0x84(4*4), 0x85(5*5), 0x86(6*6), 0x87(7*7), 0x88(8*8). 数据的Bitdepth保持不变.
  > 最终图像尺寸向下圆整到偶数, 如640/3得到212

  > 1

  > 是

  > OMEGONPROCAM_OPTION_ROTATE | 顺时针旋转: 0°, 90°, 180°, 270° | 0 | 是
  > OMEGONPROCAM_OPTION_CG | 转换增益(Conversion Gain): 0: LCG 1: HCG 2: HDR(对于OMEGONPROCAM_FLAG_CGHDR相机) 2: MCG(对于OMEGONPROCAM_FLAG_GHOPTO相机) | 型号特定 | 是

  > OMEGONPROCAM_OPTION_PIXEL_FORMAT

  > OMEGONPROCAM_PIXELFORMAT_RAW8
  > OMEGONPROCAM_PIXELFORMAT_RAW10
  > OMEGONPROCAM_PIXELFORMAT_RAW12
  > OMEGONPROCAM_PIXELFORMAT_RAW14
  > OMEGONPROCAM_PIXELFORMAT_RAW16
  > OMEGONPROCAM_PIXELFORMAT_YUV411
  > OMEGONPROCAM_PIXELFORMAT_VUYY
  > OMEGONPROCAM_PIXELFORMAT_YUV444
  > OMEGONPROCAM_PIXELFORMAT_RGB888
  > OMEGONPROCAM_PIXELFORMAT_GMCY8 (map to RGGB 8 bits)
  > OMEGONPROCAM_PIXELFORMAT_GMCY12 (map to RGGB 12 bits)
  > OMEGONPROCAM_PIXELFORMAT_UYVY
  > OMEGONPROCAM_PIXELFORMAT_RAW12PACK
  > OMEGONPROCAM_PIXELFORMAT_RAW11
  > OMEGONPROCAM_PIXELFORMAT_HDR8HL(HDR, 位深度: 8, 转换增益: 高 + 低)
  > OMEGONPROCAM_PIXELFORMAT_HDR10HL(HDR, 位深度: 10, 转换增益: 高 + 低)
  > OMEGONPROCAM_PIXELFORMAT_HDR11HL(HDR, 位深度: 11, 转换增益: 高 + 低)
  > OMEGONPROCAM_PIXELFORMAT_HDR12HL(HDR, 位深度: 12, 转换增益: 高 + 低)
  > OMEGONPROCAM_PIXELFORMAT_HDR14HL(HDR, 位深度: 14, 转换增益: 高 + 低)

  > 型号特定

  > 是
  > (相对比较“重型”的操作, 不建议在相机处于运行状态时太频繁修改)

  > OMEGONPROCAM_OPTION_DDR_DEPTH | DDR最多可以缓存的帧数: 1: DDR最大缓存一帧 0: 自动, 视频模式下自动曝光开启时为1, 其他为全部容量 -1: DDR最多可缓存至DDR全部容量 | 0 | 是

  > OMEGONPROCAM_OPTION_FFC

  > 平场校正(Flat Field Correction):
  > 设置(set):

  > > 0: 禁用
  > > 1: 启用
  > > -1: 重置
  > > (0xff000000 | n): 设置平均数为n, [1~255]

  > 获取(get):

  > > (val & 0xff): 0 => 禁用, 1 => 启用, 2 => 已初始化
  > > ((val & 0xff00) >> 8): 序号
  > > ((val & 0xff0000) >> 16): 平均数

  > 0

  > 是

  > OMEGONPROCAM_OPTION_DFC

  > 暗场校正(Dark Field Correction):
  > 设置(set):

  > > 0: 禁用
  > > 1: 启用
  > > -1: 重置
  > > (0xff000000 | n): 设置平均数为n, [1~255]

  > 获取(get):

  > > (val & 0xff): 0 => 禁用, 1 => 启用, 2 => 已初始化
  > > ((val & 0xff00) >> 8): 序号
  > > ((val & 0xff0000) >> 16): 平均数

  > 0

  > 是

  > OMEGONPROCAM_OPTION_FPNC

  > 固定模式噪声校正(Fixed Pattern Noise Correction):
  > 设置(set):

  > > 0: 禁用
  > > 1: 启用
  > > -1: 重置
  > > (0xff000000 | n): 设置平均数为n, [1~255]

  > 获取(get):

  > > (val & 0xff): 0 => 禁用, 1 => 启用, 2 => 已初始化
  > > ((val & 0xff00) >> 8): 序号
  > > ((val & 0xff0000) >> 16): 平均数

  > 0

  > 是

  > OMEGONPROCAM_OPTION_SHARPENING

  > 锐化, (threshold << 24) | (radius << 16) | strength)

  > > 强度(strength): [0, 500], default: 0 (disable)
  > > 半径(radius): [1, 10]
  > > 阈值(threshold): [0, 255]

  > 强度: 型号特定
  > 半径: 2
  > 阈值: 0

  > 是

  > OMEGONPROCAM_OPTION_FACTORY | 恢复出厂设置. 请注意恢复出厂设置可能导致分辨率改变 | 恒为0 | 是
  > OMEGONPROCAM_OPTION_TEC_VOLTAGE | 获取TEC的当前工作电压, 单位0.1伏, 如59代表5.9伏. 请不要过于频繁获取本值, 建议间隔2秒或以上 | NA | NA
  > OMEGONPROCAM_OPTION_TEC_VOLTAGE_MAX | TEC的最大工作电压, 单位0.1伏, 如59代表5.9伏 | NA | NA
  > OMEGONPROCAM_OPTION_TEC_VOLTAGE_MAX_RANGE | 获取TEC的最大工作电压范围, 单位0.1伏, 如59代表5.9伏 高16位: 最大值 低16位: 最小值 | NA | NA
  > OMEGONPROCAM_OPTION_POWER | 获取功耗, 单位: 毫瓦 | NA | NA
  > OMEGONPROCAM_OPTION_GLOBAL_RESET_MODE | global reset mode | 0 | 是
  > OMEGONPROCAM_OPTION_DEVICE_RESET | 重置相机的usb连接, 相当于模拟一次重新插拔 | NA | NA
  > OMEGONPROCAM_OPTION_FOCUSPOS | 对焦马达位置 | NA | 是
  > OMEGONPROCAM_OPTION_AFMODE | 自动对焦模式: 见OmegonprocamAFMode | NA | 是
  > OMEGONPROCAM_OPTION_AFSTATUS | 自动对焦状态: 见OmegonprocamAFStaus | NA | NA

  > OMEGONPROCAM_OPTION_TESTPATTERN

  > test pattern:
  > 0: off
  > 3: monochrome diagonal stripes
  > 5: monochrome vertical stripes
  > 7: monochrome horizontal stripes
  > 9: chromatic diagonal stripes

  > 0

  > 是

  > OMEGONPROCAM_OPTION_NOFRAME_TIMEOUT | 没有抓取到视频帧的超时时间. 当设定时间内没有获取到任何视频帧时, 触发事件OMEGONPROCAM_EVENT_NOFRAMETIMEOUT 0 => 禁用 正整数(>=OMEGONPROCAM_NOFRAME_TIMEOUT_MIN) => 超时毫秒数 | 0 | 是
  > OMEGONPROCAM_OPTION_NOPACKET_TIMEOUT | 没有抓取到视频包的超时时间. 当设定时间内没有获取到任何视频包时, 触发事件OMEGONPROCAM_EVENT_NOPACKETTIMEOUT 0 => 禁用 正整数(>=OMEGONPROCAM_NOPACKET_TIMEOUT_MIN) => 超时毫秒数 | 0 | 是
  > OMEGONPROCAM_OPTION_BANDWIDTH | 带宽, 范围：[1-100]% 设定带宽之后, 获取精确帧率的范围, 再设置精确帧率 | 100 | 是
  > OMEGONPROCAM_OPTION_MAX_PRECISE_FRAMERATE | 获取最大精确帧率. 单位0.1帧/秒, 如115表示11.5帧/秒 最大帧率和带宽的设置/分辨率/位深度/ROI相关, 当这些设置发生改变时, 最大帧率也会发生改变. 相机处于非运行状态时返回E_UNEXPECTED, E_NOTIMPL表示不支持该功能 | NA | NA
  > OMEGONPROCAM_OPTION_MIN_PRECISE_FRAMERATE | 获取最小精确帧率. 单位0.1帧/秒, 如15表示1.5帧/秒 最小帧率和带宽的设置/分辨率/位深度/ROI相关, 当这些设置发生改变时, 最小帧率也会发生改变 相机处于非运行状态时返回E_UNEXPECTED, E_NOTIMPL表示不支持该功能 | NA | NA
  > OMEGONPROCAM_OPTION_PRECISE_FRAMERATE | 单位0.1帧/秒, 如115表示11.5帧/秒. 范围：[1~最大值] | 最大帧率的90% | 是
  > OMEGONPROCAM_OPTION_RELOAD | 触发模式下发生帧丢失时恢复最后一帧的数据. get返回值S_OK表示支持本功能, E_NOTIMPL表示不支持. | NA | 是
  > OMEGONPROCAM_OPTION_CALLBACK_THREAD | 单独的专门线程用于回调, 只在拉(Pull)模式下Callback可用, 不能用于推(Push)模式: 0 => 禁用, 1 => 启用 | 0 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_FRONTEND_DEQUE_LENGTH 或 OMEGONPROCAM_OPTION_FRAME_DEQUE_LENGTH | 前端(裸数据)帧队列长度, 范围[2~1024] 内存将在相机start的时候全部预分配, 请关注内存占用 | 4 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_BACKEND_DEQUE_LENGTH | 后端(Pipeline处理后)帧队列长度(仅在拉模式下可用, Push模式下忽略), 范围[2~1024] 内存将在相机start的时候全部预分配, 请关注内存占用 | 3 | 否 (在相机处于运行状态时, 设置本选项, 函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_SEQUENCER_ONOFF | sequencer trigger: 开启/关闭 | 0 | 是
  > OMEGONPROCAM_OPTION_SEQUENCER_NUMBER | sequencer trigger: 数量, 范围[1~255] | NA | 是
  > OMEGONPROCAM_OPTION_SEQUENCER_EXPOTIME | sequencer trigger: 曝光时间 iOption = OMEGONPROCAM_OPTION_SEQUENCER_EXPOTIME | index iValue = 曝光时间值(不参考50/60HZ约束) 如设置第3组的曝光时间50ms, 则调用: Omegonprocam_put_Option(h, OMEGONPROCAM_OPTION_SEQUENCER_EXPOTIME | 3, 50000) | NA | 是
  > OMEGONPROCAM_OPTION_SEQUENCER_EXPOGAIN | sequencer trigger: 增益 iOption = OMEGONPROCAM_OPTION_SEQUENCER_EXPOGAIN | index iValue = 增益值 | NA | 是
  > OMEGONPROCAM_OPTION_DENOISE | 去噪 强度范围[0, 100], 0表示禁用 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_HEAT_MAX | 获取最大加热去雾级别 [0, max], 0表示关闭 | NA | NA
  > OMEGONPROCAM_OPTION_HEAT | 加热去雾级别 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_LIGHTSOURCE_MAX | 获取最大光源亮度级别 [0, max], 0表示关闭 | NA | NA
  > OMEGONPROCAM_OPTION_LIGHTSOURCE | 光源亮度级别 | 50%最大级别 | 是
  > OMEGONPROCAM_OPTION_HEARTBEAT | 心跳间隔, 单位毫秒 范围: [OMEGONPROCAM_HEARTBEAT_MIN, OMEGONPROCAM_HEARTBEAT_MAX] 0: 禁用 | 禁用 | 是

  > OMEGONPROCAM_OPTION_EVENT_HARDWARE

  > 启用或禁用硬件事件通知: iValue = 1 (enable), 0 (disable)

  > > (1) iOption = OMEGONPROCAM_OPTION_EVENT_HARDWARE, 所有硬件事件通知的总开关
  > > (2) iOption = OMEGONPROCAM_OPTION_EVENT_HARDWARE | (event type), 特定类型的子开关

  > 只有总开关和特定类型的子开关都保持开启, 才算真正启用该类型的事件通知.
  > 参阅这里和这里

  > 禁用

  > 总开关: 否
  > 子开关: 是

  > OMEGONPROCAM_OPTION_LOW_POWERCONSUMPTION | 低功耗模式: 0 => 禁用, 1 => 启用 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_LOW_NOISE | 低噪声模式(更高的信噪比,更低的帧率): 0 => 禁用, 1 => 启用 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_HIGH_FULLWELL | 高满阱模式: 0 => 禁用, 1 => 启用 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_AUTOEXPOSURE_PERCENT | 自动曝光亮度统计值峰值模式: 计算感兴趣区域中指定百分比最亮像素的平均亮度. 当背景较暗且目标在平均模式下曝光过度时启用本选项, 启用本选项时, 由于更多的CPU消耗, 帧速率可能会受到影响 1~99: 自动曝光ROI矩形内指定百分比最亮像素的平均亮度 0或100: 自动曝光ROI矩形内全部像素的平均亮度, 意味着“禁用” | 0(禁用) | 是
  > OMEGONPROCAM_OPTION_DEFECT_PIXEL | 坏点校正 0 => 禁用, 1 => 启用 | 启用(1) | 是
  > OMEGONPROCAM_OPTION_HDR_KB | HDR合成 K(高16位): [1, 25500] B(低16位): [0, 65535] 0xffffffff => 设置为默认值 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_HDR_THRESHOLD | HDR合成 阈值: [1, 4094] 0xffffffff => 设置为默认值 | 型号特定 | 是
  > OMEGONPROCAM_OPTION_DYNAMIC_DEFECT | 动态坏点校正: 阈值, t1(高16位): [10, 100], 表示[1.0, 10.0] 值, t2: (低16位): [0, 100], 表示[0.00, 1.00] | 不启用(t1=10, t2=0) | 是
  > OMEGONPROCAM_OPTION_ANTI_SHUTTER_EFFECT | anti shutter effect: 1 => 启用, 0 => 禁用 | 禁用(0) | 是
  > OMEGONPROCAM_OPTION_OVERCLOCK_MAX | 获取超频最大挡位 | NA | NA
  > OMEGONPROCAM_OPTION_OVERCLOCK | 超频挡位 | 0 | 是
  > OMEGONPROCAM_OPTION_RESET_SENSOR | 传感器复位 | NA | 是
  > OMEGONPROCAM_OPTION_CHAMBER_HT | 密封舱湿度和温度: 高16位: 湿度, 单位0.1%, 如325表示湿度=32.5% 低16位: 温度, 单位0.1℃, 如32表示3.2℃ | NA | NA
  > OMEGONPROCAM_OPTION_ENV_HT | 环境湿度和温度 | NA | NA
  > OMEGONPROCAM_OPTION_EXPOSURE_PRE_DELAY | 曝光信号预延迟, 微秒 | 0 | 是
  > OMEGONPROCAM_OPTION_EXPOSURE_POST_DELAY | 曝光信号后延迟, 微秒 | 0 | 是
  > OMEGONPROCAM_OPTION_LINE_PRE_DELAY | 指定行预延迟, 微秒 | 0 | 是
  > OMEGONPROCAM_OPTION_LINE_POST_DELAY | 指定行后延迟, 微秒 | 0 | 是
  > OMEGONPROCAM_OPTION_AUTOEXPO_CONV | 获取当前自动曝光收敛状态: 1(YES) or 0(NO), -1(NA) |  | NA
  > OMEGONPROCAM_OPTION_AUTOEXP_EXPOTIME_DAMP | 自动曝光阻尼系数: 曝光时间 (千分数) 阻尼系数越大, 曝光时间改变越平滑越慢 | 0 | 是
  > OMEGONPROCAM_OPTION_AUTOEXP_GAIN_DAMP | 自动曝光阻尼系数: 增益 (千分数) 阻尼系数越大, 增益改变越平滑越慢 | 0 | 是

  > OMEGONPROCAM_OPTION_OVEREXP_POLICY

  > 自动曝光过曝策略: 当过曝时,

  > > 0 => 直接降低曝光时间/增益到最小值; 或
  > > 1 => 按当前和目标亮度的比例降低曝光时间/增益; 或
  > > n(>1) => 先将曝光时间调节为(自动曝光时间最大值*自动曝光增益最大值) * n / 1000, 然后再按1的策略进行调节

  > 策略0的优点是收敛速度更快, 缺点是有黑屏.
  > 策略1避免黑屏, 但是收敛速度更慢.

  > 是

  > 是

  > OMEGONPROCAM_OPTION_AUTOEXPO_TRIGGER | 触发模式下自动曝光: 1(启用) or 0(禁用) | 0 | 是

  > OMEGONPROCAM_OPTION_AWB_CONTINUOUS

  > 自动白平衡: 连续模式

  > > 0: 禁用
  > > n>0: 每隔n毫秒
  > > n<0: 每隔-n帧

  > 0(禁用)

  > Yes

  > OMEGONPROCAM_OPTION_THREAD_PRIORITY

  > 设置内部线程的优先级.
  > Win:

  > > 0 = THREAD_PRIORITY_NORMAL;
  > > 1 = THREAD_PRIORITY_ABOVE_NORMAL;
  > > 2 = THREAD_PRIORITY_HIGHEST;
  > > 3 = THREAD_PRIORITY_TIME_CRITICAL;
  > > 请参阅: SetThreadPriority

  > Linux & macOS:

  > > 高16位为调度策略, 低16位为优先级.
  > > 请参阅: pthread_setschedparam

  > Win: 1
  > Linux / macOS: NA

  > 是

  > OMEGONPROCAM_OPTION_LINEAR | 内部linear tone mapping: 0 = 关闭 1 = 开启 | 1 | 是
  > OMEGONPROCAM_OPTION_CURVE | 内部curve tone mapping: 0 = 关闭 1 = 开启多项式(polynomial)拟合 2 = 开启对数(logarithmic)拟合 | 2 | 是
  > OMEGONPROCAM_OPTION_COLORMATIX | 0 = 关闭内部颜色矩阵 1 = 开启内部颜色矩阵 | 1 | 是

  > OMEGONPROCAM_OPTION_DEMOSAIC

  > 视频和静态图像的Demosaic算法：(请参阅https://en.wikipedia.org/wiki/Demosaicing)
  > 0 = BILINEAR
  > 1 = VNG(Variable Number of Gradients, 可变数量梯度)
  > 2 = PPG(Patterned Pixel Grouping)
  > 3 = AHD(Adaptive Homogeneity Directed, 自适应同质导向)
  > 4 = EA(Edge Aware, 边缘感知)
  > 对于黑白相机始终返回E_NOTIMPL.

  > 0

  > 是

  > OMEGONPROCAM_OPTION_DEMOSAIC_VIDEO | 视频的Demosaic算法 | 0 | 是
  > OMEGONPROCAM_OPTION_DEMOSAIC_STILL | 静态图像的Demosaic算法 | 0 | 是
  > OMEGONPROCAM_OPTION_OPEN_USB_ERRORCODE | 打开USB的错误码. get only | NA | NA
  > OMEGONPROCAM_OPTION_FLUSH | 1: 硬flush, 丢弃相机内部DDR缓存的帧(如果有的话) 2: 软flush, 丢弃omegonprocam.dll内部缓存的帧(如果有的话) 3: 硬+软 Omegonprocam_Flush是'硬+软' 成功时返回被软flush掉的帧数目, 失败时返回HRESULT | NA | NA
  > OMEGONPROCAM_OPTION_READOUT_MODE | 读出模式: 0 = IWR (边读出边积分, Integrate While Read) 1 = ITR (先积分后读出, Integrate Then Read) | NA | 是
  > OMEGONPROCAM_OPTION_TAILLIGHT | 打开关闭尾灯: 0 => 关 1 => 开 | 1 | 是
  > OMEGONPROCAM_OPTION_PSEUDO_COLOR_START | 伪彩色: 起始颜色, BGR格式 | NA | 是
  > OMEGONPROCAM_OPTION_PSEUDO_COLOR_END | 伪彩色: 结束颜色, BGR格式 | NA | 是

  > OMEGONPROCAM_OPTION_PSEUDO_COLOR_ENABLE

  > 伪彩色:
  > -1 => 自定义: 使用起始颜色和结束颜色产生颜色映射表格
  > 0 => 禁用
  > 1 => spot
  > 2 => spring
  > 3 => summer
  > 4 => autumn
  > 5 => winter
  > 6 => bone
  > 7 => jet
  > 8 => rainbow
  > 9 => deepgreen
  > 10 => ocean
  > 11 => cool
  > 12 => hsv
  > 13 => pink
  > 14 => hot
  > 15 => parula
  > 16 => magma
  > 17 => inferno
  > 18 => plasma
  > 19 => viridis
  > 20 => cividis
  > 21 => twilight
  > 22 => twilight_shifted
  > 23 => turbo
  > 24 => red
  > 25 => green
  > 26 => blue

  > 0

  > 是

  > OMEGONPROCAM_OPTION_NUMBER_DROP_FRAME | 已经从USB抓取但是被软件丢弃的帧数 | NA | NA
  > OMEGONPROCAM_OPTION_DUMP_CFG | 0 = 当相机被停止时, 不自动刷新配置到文件或EEPROM 1 = 当相机被停止时, 自动刷新配置到文件或EEPROM -1 = 执行一次手动刷新配置到文件或EEPROM | 1 | 是
  > OMEGONPROCAM_OPTION_FRONTEND_DEQUE_CURRENT | 获取前端队列的当前帧数目 | NA | NA
  > OMEGONPROCAM_OPTION_BACKEND_DEQUE_CURRENT | 获取后端队列的当前帧数目 | NA | NA
  > OMEGONPROCAM_OPTION_PACKET_NUMBER | 获取接收到的包数目 | NA | NA

  > OMEGONPROCAM_OPTION_GIGETIMEOUT

  > For GigE cameras, the application periodically sends heartbeat signals to the camera to keep the connection to the camera alive. If the camera doesn't receive heartbeat signals within the time period specified by the heartbeat timeout counter, the camera resets the connection. When the application is stopped by the debugger, the application cannot create the heartbeat signals.
  > 0 => 自动: 当相机被打开时, 如存在调试器则禁用, 如不存在调试器则启用
  > 1 => 启用
  > 2 => 禁用

  > 0

  > 是

  > OMEGONPROCAM_OPTION_FILTERWHEEL_SLOT | 滤镜轮孔数 | 7 | 是

  > OMEGONPROCAM_OPTION_FILTERWHEEL_POSITION

  > 滤镜轮位置:
  > 设置(set):

  > > -1: 校准
  > > val & 0xff: 位置
  > > (val >> 8) & 0x1: 方向, 0=>顺时钟, 1=>自动方向

  > 获取(get):

  > > -1: 动作中
  > > val: 目标到达

  > NA

  > 是

  > 重要提示:

  > a. 部分设置只可以在相机不在运行时才可以修改(以上表格最后一列值为“否”).

  > b. 不允许在POMEGONPROCAM_EVENT_CALLBACK和POMEGONPROCAM_DATA_CALLBACK_V4/V3的回调上下文中调用Omegonprocam_put_Option设置OMEGONPROCAM_OPTION_TRIGGER, OMEGONPROCAM_OPTION_BITDEPTH, OMEGONPROCAM_OPTION_PIXEL_FORMAT, OMEGONPROCAM_OPTION_BINNING, OMEGONPROCAM_OPTION_ROTATE, 否则返回E_WRONG_THREAD.

  > c. UHCCD03100KPB, UHCCD05000KPA, UHCCD05100KPA的小分辨率不支持RAW模式.

- ## Omegonprocam_put_RealTime
  Omegonprocam_get_RealTime

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > int val:

  > > 0: 当帧缓冲队列满时停止抓帧, 直到队列中的帧被取走从而队列非满
  > > 1: 实时

  > > > 使用最小的帧缓冲. 当新帧来到时, 不论帧缓冲区是否满, 都把所有的老帧全部丢弃.
  > > > 如果有DDR, 将同时把DDR帧缓冲也设为1.

  > > 2: 软实时

  > > > 当帧缓冲区满时, 丢弃最老的帧再入队新帧

  说明：如果设置RealTime模式为1, 更短的帧延时, 但是帧速率降低, 流畅性受损. 缺省设为0, 一般不需要改动.

- ## Omegonprocam_get_AutoExpoEnable
  Omegonprocam_put_AutoExpoEnable
  Omegonprocam_get_AutoExpoTarget
  Omegonprocam_put_AutoExpoTarget
  Omegonprocam_put_AutoExpoRange
  Omegonprocam_get_AutoExpoRange
  Omegonprocam_put_MaxAutoExpoTimeAGain
  Omegonprocam_get_MaxAutoExpoTimeAGain
  Omegonprocam_put_MinAutoExpoTimeAGain
  Omegonprocam_get_MinAutoExpoTimeAGain

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > int bAutoExposure:

  > > 0: 不启用自动曝光
  > > 1: 自动曝光连续模式
  > > 2: 自动曝光“单次”模式

  > unsigned short Target：自动曝光目标

  > unsigned maxTime, unsigned short maxAGain：自动曝光的最大曝光时间和最大模拟增益. 默认值分别为350ms和500.

  > unsigned minTime, unsigned short minAGain：自动曝光的最小曝光时间和最小模拟增益. 默认值分别为0和100.

  说明：如果启用自动曝光, 软件将自动设置曝光时间和模拟增益使得目标矩形的平均亮度尽量接近曝光目标(见Omegonprocam_put_AEAuxRect, Omegonprocam_get_AEAuxRect).

- ## Omegonprocam_get_ExpoTime
  Omegonprocam_put_ExpoTime
  Omegonprocam_get_ExpTimeRange
  Omegonprocam_get_RealExpoTime

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned Time：曝光时间, 单位微秒

  > unsigned* nMin, unsigned* nMax, unsigned* nDef：曝光时间的最小值, 最大值, 默认值

  说明：曝光时间相关. Omegonprocam_get_RealExpoTime获取基于50HZ/60HZ调整过的曝光时间.

- ## Omegonprocam_get_ExpoAGain
  Omegonprocam_put_ExpoAGain
  Omegonprocam_get_ExpoAGainRange

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short AGain：模拟增益, 百分比, 如200表示增益200%

  > unsigned short* nMin, unsigned short* nMax, unsigned short* nDef：模拟增益的最小值, 最大值, 默认值

  说明：模拟增益相关.

- ## Omegonprocam_put_Hue
  Omegonprocam_get_Hue
  Omegonprocam_put_Saturation
  Omegonprocam_get_Saturation
  Omegonprocam_put_Brightness
  Omegonprocam_get_Brightness
  Omegonprocam_get_Contrast
  Omegonprocam_put_Contrast
  Omegonprocam_get_Gamma
  Omegonprocam_put_Gamma

  返回值： HRESULT类型表示成功或失败

  参数：HOmegonprocam h：相机句柄

  说明：设置或者得到：色度, 饱和度, 亮度, 对比度, Gamma

- ## Omegonprocam_get_Chrome
  Omegonprocam_put_Chrome

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > int bChrome：1(单色)或0(彩色)

  说明：多色模式或者单色模式.

- ## Omegonprocam_get_VFlip
  Omegonprocam_put_VFlip
  Omegonprocam_get_HFlip
  Omegonprocam_put_HFlip

  返回值： HRESULT类型表示成功或失败

  参数： HOmegonprocam h：相机句柄

  说明：垂直或者水平翻转

- ## Omegonprocam_put_Speed
  Omegonprocam_get_Speed
  Omegonprocam_get_MaxSpeed

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short nSpeed：帧速率级别

  说明：最小帧速率等级是0. 最大帧速率级别可以通过Omegonprocam_get_MaxSpeed函数得到, 和OmegonprocamModelV2的maxspeed是一个意思.
  对于部分支持所谓精确帧率的相机, 建议使用精确帧率控制. 为了保持兼容, Speed仍然有效, 映射机制为: MaxSpeed为9(共10级), 分别对应Bandwidth从10%~100%时的最大帧率. 如设置speed为8, 等同于: 精确帧率设置为Bandwith设置为90%时的最大帧率.

- ## Omegonprocam_put_HZ
  Omegonprocam_get_HZ

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > int nHZ：0表示60Hz交流, 1表示50Hz交流, 2表示直流

  说明：设置光源的电力供应频率

- ## Omegonprocam_get_Temperature
  Omegonprocam_put_Temperature

  返回值： HRESULT类型表示成功或失败, E_NOTIMPL表示不支持读取/设置温度

  参数：

  > HOmegonprocam h：相机句柄

  > short nTemperature：以0.1℃为单位, 如32表示3.2℃, -35表示-3.5℃. 设置目标温度为"-2730"或以下表示使用本型号的默认值.

  说明：读取传感器温度(OMEGONPROCAM_FLAG_GETTEMPERATURE表示支持读取温度).

  > 设置传感器目标温度, 和Omegonprocam_put_Option(, OMEGONPROCAM_OPTION_TECTARGET, )等价.

- ## Omegonprocam_put_Mode
  Omegonprocam_get_Mode

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > int bSkip：Bin模式或者Skip模式

  说明：设置Bin模式或者Skip模式.较高分辨率的相机支持2种采样模式, 一种是Bin模式（邻域平均）, 一种是Skip模式（抽样提取）.相比较而言, 前者图像效果较好, 但是帧速率降低；后者帧速率较高, 但是图像效果较差.

- ## Omegonprocam_put_TempTint
  Omegonprocam_get_TempTint

  返回值： HRESULT类型表示成功或失败. Temp/Tint模式下起作用, RGB Gain模式下不起作用直接返回E_NOTIMPL. 对于黑白相机, 始终返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机句柄

  > int nTemp, int nTint：色温和Tint

  说明：Temp/Tint模式下设置/获取白平衡的色温和Tint参数.请参阅这里.

- ## Omegonprocam_AwbOnce

  返回值： HRESULT类型表示成功或失败. Temp/Tint模式下起作用, RGB Gain模式下不起作用直接返回E_NOTIMPL. 对于黑白相机, 始终返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机句柄

  > PIOMEGONPROCAM_TEMPTINT_CALLBACK funTT, void* ctxTT：自动白平衡过程完成时的回调函数以及回调上下文.

  说明：Temp/Tint白平衡模式下调用本函数来触发单次自动白平衡功能. 当白平衡参数计算完成的时候, OMEGONPROCAM_EVENT_TEMPTINT事件会通知应用程序(Pull Mode)和调用回调函数. Pull mode中, 如果不使用回调函数, 请把函数指针设为NULL.

- ## Omegonprocam_put_WhiteBalanceGain
  Omegonprocam_get_WhiteBalanceGain

  返回值： HRESULT类型表示成功或失败. RGB Gain模式下起作用, Temp/Tint模式下不起作用直接返回E_NOTIMPL. 对于黑白相机, 始终返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机句柄

  > int aGain[3]：RGB增益值

  说明：RGB Gain模式下设置/获取白平衡的RGB增益值. 请参阅这里.

- ## Omegonprocam_AwbInit

  返回值： HRESULT类型表示成功或失败. RGB Gain模式下起作用, Temp/Tint模式下不起作用直接返回E_NOTIMPL. 对于黑白相机, 始终返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机句柄

  > PIOMEGONPROCAM_WHITEBALANCE_CALLBACK funWB, void* ctxWB：自动白平衡过程完成时的回调函数以及回调上下文.

  说明：RGB Gain白平衡模式下调用本函数来触发单次自动白平衡功能. 当白平衡参数计算完成的时候, OMEGONPROCAM_EVENT_WBGAIN事件会通知应用程序(Pull Mode)和调用回调函数. Pull mode中, 如果不使用回调函数, 请把函数指针设为NULL.

- ## Omegonprocam_AbbOnce

  返回值： HRESULT类型表示成功或失败. 对于黑白相机, 始终返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机句柄

  > PIOMEGONPROCAM_BLACKBALANCE_CALLBACK funBB, void* ctxBB：自动黑平衡过程完成时的回调函数以及回调上下文.

  说明：调用本函数来触发单次自动黑平衡功能. 当黑平衡参数计算完成的时候, OMEGONPROCAM_EVENT_BLACK事件会通知应用程序(Pull Mode)和调用回调函数. Pull mode中, 如果不使用回调函数, 请把函数指针设为NULL.

- ## Omegonprocam_put_BlackBalance
  Omegonprocam_get_BlackBalance

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short aSub[3]：RGB偏移值

  说明：设置/获取黑平衡的RGB偏移值

- ## Omegonprocam_put_AWBAuxRect
  Omegonprocam_get_AWBAuxRect
  Omegonprocam_put_AEAuxRect
  Omegonprocam_get_AEAuxRect
  Omegonprocam_put_ABBAuxRect
  Omegonprocam_get_ABBAuxRect

  返回值： HRESULT类型表示成功或失败

  参数：HOmegonprocam h：相机句柄

  说明：设置/获取自动白平衡和自动曝光和黑平衡的参考矩形. 默认矩形位于图像正中央, 宽度等于20%图像宽度,高度等于20%图像高度.

  注意：坐标永远是相对原始分辨率而言的, 请参阅这里.

  对于黑白相机, 白平衡和黑平衡始终返回E_NOTIMPL.

- ## Omegonprocam_get_MonoMode

  返回值：S_OK表示单色模式, S_FALSE表示彩色模式

  参数：HOmegonprocam h：相机句柄

  说明：是否单色相机, 对应OmegonprocamModelV2的flag: OMEGONPROCAM_FLAG_MONO

- ## Omegonprocam_get_MaxBitDepth

  返回值：相机支持的最大位深度(bitdepth)

  参数：HOmegonprocam h：相机句柄

  说明：有些型号的相机支持比8bits更大的位深度, 如10, 12, 14, 16等.

- ## Omegonprocam_get_StillResolutionNumber
  Omegonprocam_get_StillResolution

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：分辨率序号

  > int* pWidth, int* pHeight：宽度、高度

  说明：Omegonprocam_get_StillResolutionNumber得到支持的静态抓拍分辨率个数（如UCMOS03100KPA返回3, 表示支持3种分辨率）, 如果不支持静态抓拍能力, 返回0.Omegonprocam_get_StillResolution得到每种分辨率的高度/宽度.

- ## Omegonprocam_get_SerialNumber
  Omegonprocam_get_FwVersion
  Omegonprocam_get_HwVersion
  Omegonprocam_get_ProductionDate
  Omegonprocam_get_Revision

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > char sn[32]：存放序列号的缓冲区. 如：TP110826145730ABCD1234FEDC56787

  > char fwver[16]: 存放固件版本号的缓冲区. 如: 3.2.1.20140922

  > char hwver[16]: 存放硬件版本好的缓冲区. 如: 3.12

  > char pdate[10]: 存放生产日期的缓冲区. 如: 20150327

  > unsigned short pRevision: revision

  说明：每个相机都有一个唯一的31位的序列号(少量型号的相机只能在开启相机之后才能获取序列号).

- ## Omegonprocam_get_PixelSize

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned nResolutionIndex：分辨率序号

  > float* x, float* y: 传感器物理像元大小, 如2.4μm × 2.4μm

- ## Omegonprocam_put_LEDState

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short iLed：LED灯的序号

  > unsigned short iState：LED状态, 1代表常亮, 2代表闪烁, 其它代表熄灭

  > unsigned short iPeriod：闪烁周期, 毫秒数. 至少需要500ms.

  说明：有些相机上安装有1到n个LED灯, 本函数控制这些灯的状态.

- ## Omegonprocam_read_EEPROM
  Omegonprocam_write_EEPROM

  返回值： HRESULT类型表示失败或读写的字节数

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned addr: EEPROM读写地址

  > const unsigned char* pBuffer: 需要写入EEPROM的数据

  > unsigned char* pBuffer: 读取EEPROM的缓冲区

  > unsigned nBufferLen: 缓冲区长度

  说明：有些相机上安装有EEPROM可供读写. 读写失败时返回HRESULT错误码（负数）, 成功时返回读取或者写入的字节数.

- ## Omegonprocam_read_UART
  Omegonprocam_write_UART

  返回值： HRESULT类型表示失败或读写的字节数

  参数：

  > HOmegonprocam h: 相机句柄

  > const unsigned char* pBuffer: 需要写入的数据

  > unsigned char* pBuffer: 读取缓冲区

  > unsigned nBufferLen: 缓冲区长度

  说明：如果读写失败, 返回负数HRESULT；如果成功, 返回读写成功的字节数.

- ## Omegonprocam_FfcOnce
  Omegonprocam_DfcOnce
  Omegonprocam_FpncOnce

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

- ## Omegonprocam_FfcExport
  Omegonprocam_FfcImport
  Omegonprocam_DfcExport
  Omegonprocam_DfcImport
  Omegonprocam_FpncExport
  Omegonprocam_FpncImport

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > filepath: 文件路径

  说明：导入导出*.ffc或*.dfc或*.fpnc文件.

- ## Omegonprocam_IoControl

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned ioLineNumber:

  > > 0 => Opto-isolated input
  > > 1 => Opto-isolated output
  > > 2 => GPIO0
  > > 3 => GPIO1

  > unsigned nType: 控制类型, 见下表

  > int outVal: 输出控制值

  > int* inVal: 输入控制值

  > OMEGONPROCAM_IOCONTROLTYPE_GET_SUPPORTEDMODE | 支持的模式： 0x01 => 输入 0x02 => 输出 (0x01 | 0x02) => 同时支持输入和输出
  > OMEGONPROCAM_IOCONTROLTYPE_GET_GPIODIR | IO方向：0x00 => 输入, 0x01 => 输出
  > OMEGONPROCAM_IOCONTROLTYPE_SET_GPIODIR

  > OMEGONPROCAM_IOCONTROLTYPE_GET_FORMAT

  > 格式：
  > 0x00 => 未连接
  > 0x01 => 三态
  > 0x02 => TTL
  > 0x03 => LVDS
  > 0x04 => RS422
  > 0x05 => 光耦隔离

  > OMEGONPROCAM_IOCONTROLTYPE_SET_FORMAT
  > OMEGONPROCAM_IOCONTROLTYPE_GET_OUTPUTINVERTER | 输出反相：boolean, 只支持输出信号
  > OMEGONPROCAM_IOCONTROLTYPE_SET_OUTPUTINVERTER
  > OMEGONPROCAM_IOCONTROLTYPE_GET_INPUTACTIVATION | 输入信号触发沿：0x00 => 上升沿, 0x01 => 下降沿, 0x02 => 高电平, 0x03 => 低电平
  > OMEGONPROCAM_IOCONTROLTYPE_SET_INPUTACTIVATION
  > OMEGONPROCAM_IOCONTROLTYPE_GET_DEBOUNCERTIME | 消抖时间, [0, 20000]微秒
  > OMEGONPROCAM_IOCONTROLTYPE_SET_DEBOUNCERTIME

  > OMEGONPROCAM_IOCONTROLTYPE_GET_TRIGGERSOURCE

  > 触发源：0x00 => 光耦隔离输入
  > 0x01 => GPIO0
  > 0x02 => GPIO1
  > 0x03 => 计数器分频模式
  > 0x04 => 脉冲模式(PWM)
  > 0x05 => 软件

  > OMEGONPROCAM_IOCONTROLTYPE_SET_TRIGGERSOURCE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_TRIGGERDELAY | 触发延迟时间, [0, 5000000]微秒
  > OMEGONPROCAM_IOCONTROLTYPE_SET_TRIGGERDELAY
  > OMEGONPROCAM_IOCONTROLTYPE_GET_BURSTCOUNTER | 突发计数, 范围：[1 ~ 65535]
  > OMEGONPROCAM_IOCONTROLTYPE_SET_BURSTCOUNTER
  > OMEGONPROCAM_IOCONTROLTYPE_GET_COUNTERSOURCE | 计数器模式信号源： 0x00 => 光耦隔离输入 0x01 => GPIO0 0x02 => GPIO1
  > OMEGONPROCAM_IOCONTROLTYPE_SET_COUNTERSOURCE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_COUNTERVALUE | 计数值, 范围：[1 ~ 65535]
  > OMEGONPROCAM_IOCONTROLTYPE_SET_COUNTERVALUE
  > OMEGONPROCAM_IOCONTROLTYPE_SET_RESETCOUNTER | 计数器复位
  > OMEGONPROCAM_IOCONTROLTYPE_GET_PWMSOURCE | 脉冲模式信号源： 0x00 => 光耦隔离输入 0x01 => GPIO0 0x02 => GPIO1
  > OMEGONPROCAM_IOCONTROLTYPE_SET_PWMSOURCE

  > OMEGONPROCAM_IOCONTROLTYPE_GET_OUTPUTMODE

  > 输出模式：
  > 0x00 => 触发等待信号
  > 0x01 => 曝光有效信号
  > 0x02 => 闪光灯信号
  > 0x03 => 用户输出信号
  > 0x04 => 计数器输出信号
  > 0x05 => 定时器输出信号

  > OMEGONPROCAM_IOCONTROLTYPE_SET_OUTPUTMODE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_STROBEDELAYMODE | 闪光灯信号延迟模式, 0 => 预输出, 1 => 延迟输出; compared to exposure active signal
  > OMEGONPROCAM_IOCONTROLTYPE_SET_STROBEDELAYMODE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_STROBEDELAYTIME | 闪光灯信号延迟时间, [0, 5000000]微秒
  > OMEGONPROCAM_IOCONTROLTYPE_SET_STROBEDELAYTIME
  > OMEGONPROCAM_IOCONTROLTYPE_GET_STROBEDURATION | 闪光灯脉冲宽度, [0, 5000000]微秒
  > OMEGONPROCAM_IOCONTROLTYPE_SET_STROBEDURATION
  > OMEGONPROCAM_IOCONTROLTYPE_GET_USERVALUE | 用户输出数值：bit0 => 光耦隔离输出 bit1 => GPIO0输出 bit2 => GPIO1输出
  > OMEGONPROCAM_IOCONTROLTYPE_SET_USERVALUE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_UART_ENABLE | 启用串口: 1 => on; 0 => off
  > OMEGONPROCAM_IOCONTROLTYPE_SET_UART_ENABLE

  > OMEGONPROCAM_IOCONTROLTYPE_GET_UART_BAUDRATE

  > 波特率:
  > 0 => 9600
  > 1 => 19200
  > 2 => 38400
  > 3 => 57600
  > 4 => 115200

  > OMEGONPROCAM_IOCONTROLTYPE_SET_UART_BAUDRATE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_UART_LINEMODE | 线缆选择: 0 => TX(GPIO_0)/RX(GPIO_1) 1 => TX(GPIO_1)/RX(GPIO_0)
  > OMEGONPROCAM_IOCONTROLTYPE_SET_UART_LINEMODE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EXPO_ACTIVE_MODE | 曝光时间信号(exposure time signal): 0 => 指定行(specified line) 1 => common exposure time
  > OMEGONPROCAM_IOCONTROLTYPE_SET_EXPO_ACTIVE_MODE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EXEVT_ACTIVE_MODE | 曝光事件(exposure event): 0 => 指定行(specified line) 1 => common exposure time
  > OMEGONPROCAM_IOCONTROLTYPE_SET_EXEVT_ACTIVE_MODE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EXPO_START_LINE | 曝光开始行, 默认：1
  > OMEGONPROCAM_IOCONTROLTYPE_SET_EXPO_START_LINE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EXPO_END_LINE | 曝光结束行, 默认：0 结束行必须不小于开始行
  > OMEGONPROCAM_IOCONTROLTYPE_SET_EXPO_END_LINE
  > OMEGONPROCAM_IOCONTROLTYPE_GET_OUTPUTCOUNTERVALUE | 输出计数器, 范围: [0 ~ 65535]
  > OMEGONPROCAM_IOCONTROLTYPE_SET_OUTPUTCOUNTERVALUE
  > OMEGONPROCAM_IOCONTROLTYPE_SET_OUTPUT_PAUSE | 输出暂停: 1 => 暂停, 0 => 继续
  > OMEGONPROCAM_IOCONTROLTYPE_GET_INPUT_STATE | 输入状态: 0 (低电平) 或 1 (高电平)
  > OMEGONPROCAM_IOCONTROLTYPE_GET_USER_PULSE_HIGH | 用户脉冲高电平时间(微秒)
  > OMEGONPROCAM_IOCONTROLTYPE_SET_USER_PULSE_HIGH
  > OMEGONPROCAM_IOCONTROLTYPE_GET_USER_PULSE_LOW | 用户脉冲低电平时间(微秒)
  > OMEGONPROCAM_IOCONTROLTYPE_SET_USER_PULSE_LOW
  > OMEGONPROCAM_IOCONTROLTYPE_GET_USER_PULSE_NUMBER | 用户脉冲数目, 默认值: 0
  > OMEGONPROCAM_IOCONTROLTYPE_SET_USER_PULSE_NUMBER
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EXTERNAL_TRIGGER_NUMBER | 外部触发信号计数
  > OMEGONPROCAM_IOCONTROLTYPE_GET_DEBOUNCER_TRIGGER_NUMBER | 消抖后的触发信号计数
  > OMEGONPROCAM_IOCONTROLTYPE_GET_EFFECTIVE_TRIGGER_NUMBER | 有效触发信号计数

- ## Omegonprocam_put_LevelRangeV2
  Omegonprocam_get_LevelRangeV2

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short mode: 模式, 见下表

  > OMEGONPROCAM_LEVELRANGE_MANUAL | 手动模式
  > OMEGONPROCAM_LEVELRANGE_ONCE | 单次
  > OMEGONPROCAM_LEVELRANGE_CONTINUE | 持续模式
  > OMEGONPROCAM_LEVELRANGE_ROI | 更新ROI矩形

  > RECT* pRoiRect: ROI矩形

  > unsigned short aLow[4], unsigned short aHigh[4]: R, G, B和灰度的Level Range. RGB只对彩色图像有效, 灰度只对灰度图像有效.

  说明：LevelRange相关.

- ## Omegonprocam_put_Demosaic

  返回值： HRESULT类型表示成功或失败

  参数：

  > funDemosaic: 替换内建的demosaic函数

  > > typedef void (*POMEGONPROCAM_DEMOSAIC_CALLBACK)(unsigned nFourCC, int nW, int nH, const void* input, void* output, unsigned char nBitDepth, void* ctxDemosaic);

  > ctxDemosaic: 回调函数上下文

- ## Omegonprocam_Update

  返回值： HRESULT类型表示成功或失败

  参数：

  > camId：相机实例ID

  > filePath: ufw文件全路径

  > pFun, ctxProgress: 进度百分比回调函数

  说明：固件升级. 升级过程中请千万不要拔出设备或断电, 这非常非常重要. 一旦升级过程中拔出设备或断电, 相机将不再可用, 只能返厂维修.

- ## Omegonprocam_Replug

  返回值：>0: 被插拔的相机数量; =0: 没有找到对应的相机; E_ACCESSDENIED: 权限不足, 需要管理员权限

  参数：

  > camId：相机实例ID

  说明：模拟插拔, 整个过程大约需要3秒钟

- ## Omegonprocam_LevelRangeAuto

  返回值： HRESULT类型表示成功或失败

  参数：HOmegonprocam h：相机句柄

  说明：软件自动LevelRange

- ## Omegonprocam_put_LevelRange
  Omegonprocam_get_LevelRange

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > unsigned short aLow[4], unsigned short aHigh[4]: R, G, B和灰度的Level Range. RGB只对彩色图像有效, 灰度只对灰度图像有效.

  说明：软件LevelRange相关.

- ## Omegonprocam_GetHistogram

  返回值： HRESULT类型表示成功或失败

  参数：

  > HOmegonprocam h：相机句柄

  > PIOMEGONPROCAM_HISTOGRAM_CALLBACK funHistogram, void* ctxHistogram：直方图数据的回调函数以及回调上下文

  说明：获取直方图数据

- ## 一些参数的范围以及默认值

  参数 | 范围 | 默认值 | 获取 | 设置 | 自动
  Auto Exposure Target (自动曝光目标亮度) | 16~220 | 120 | Omegonprocam_get_AutoExpoTarget | Omegonprocam_put_AutoExpoTarget |
  Exposure Gain (曝光增益) | 100~ | 100 | Omegonprocam_get_ExpoAGain | Omegonprocam_put_ExpoAGain |
  白平衡 | Temp/Tint模式 | Temp(色温) | 2000~15000 | 6503 | Omegonprocam_get_TempTint | Omegonprocam_put_TempTint | Omegonprocam_AwbOnce
  Tint | 200~2500 | 1000
  RGB Gain模式 | Red Gain | -127~127 | 0 | Omegonprocam_get_WhiteBalanceGain | Omegonprocam_put_WhiteBalanceGain | Omegonprocam_AwbInit
  Green Gain
  Blue Gain
  黑平衡 | 0~255(位深度=8) 0~1023(位深度=8) 0~4095(位深度=8) 0~16383(位深度=8) 0~65535(位深度=8) | 0 | Omegonprocam_get_BlackBalance | Omegonprocam_put_BlackBalance | Omegonprocam_AbbOnce
  LevelRange | 软件 | 0~255 | Low = 0 High = 255 | Omegonprocam_get_LevelRange | Omegonprocam_put_LevelRange | Omegonprocam_LevelRangeAuto
  硬件 | Omegonprocam_get_LevelRangeV2 | Omegonprocam_put_LevelRangeV2
  Contrast(对比度) | -150~150 | 0 | Omegonprocam_get_Contrast | Omegonprocam_put_Contrast |
  Hue(色度) | -180~180 | 0 | Omegonprocam_get_Hue | Omegonprocam_put_Hue |
  Saturation(饱和度) | 0~255 | 128 | Omegonprocam_get_Saturation | Omegonprocam_put_Saturation |
  Brightness(亮度) | -128~128 | 0 | Omegonprocam_get_Brightness | Omegonprocam_put_Brightness |
  Gamma | 20~180 | 100 | Omegonprocam_get_Gamma | Omegonprocam_put_Gamma |
  Black Level(暗电平) | 0~31 (位深度=8) 0~31 * 4 (位深度=10) 0~31 * 16 (位深度=12) 0~31 * 64 (位深度=14) 0~31 * 256 (位深度=16) | 型号特定 | Omegonprocam_get_Option | Omegonprocam_put_Option |
  Auto Exposure (自动曝光) | Max(最大) | Exposure Time (曝光时间) |  | 350ms | Omegonprocam_get_AutoExpoRange Omegonprocam_get_MaxAutoExpoTimeAGain Omegonprocam_get_MinAutoExpoTimeAGain | Omegonprocam_put_AutoExpoRange Omegonprocam_put_MaxAutoExpoTimeAGain Omegonprocam_put_MinAutoExpoTimeAGain |
  Gain (增益) | 500
  Min(最小) | Exposure Time (曝光时间) |  | 0 | Omegonprocam_get_MinAutoExpoTimeAGain | Omegonprocam_put_MinAutoExpoTimeAGain |
  Gain (增益) | 100
  Percent(百分比) | 0~100 | 0(禁用) 10(启用) | OMEGONPROCAM_OPTION_AUTOEXPOSURE_PERCENT |
  TEC目标 | 型号特定 | 型号特定 | OMEGONPROCAM_OPTION_TECTARGET |

# 5. .NET(C#和VB.NET)

Omegonprocam支持.NET开发环境(C#和VB.NET).

omegonprocam.cs使用P/Invoke调用至omegonprocam.dll. 把omegonprocam.cs拷贝到你的C#工程中使用, 请参考示例代码.

请主意Omegonprocam C#包装类的实例通过静态方法Open或者OpenByIndex得到, 而不是通常的obj = new Omegonprocam(构造函数特意是私有的).

绝大多数Omegonprocam类的方法和属性都P/Invoke调用至omegonprocam.dll/so中对应的原生C/C++ Omegonprocam_xxx函数. 所以, 关于Omegonprocam_xxx的文档说明都适用于C#中对应的属性或方法, 比如, C#中的Snap方法调用Omegonprocam_Snap函数, 关于Omegonprocam_Snap函数的说明同样适用于C# Omegonprocam类的Snap方法：

    [DllImport("omegonprocam.dll", ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    private static extern int Omegonprocam_Snap(SafeHOmegonprocamHandle h, uint nResolutionIndex);

    public bool Snap(uint nResolutionIndex)
    {
        if (_handle == null || _handle.IsInvalid || _handle.IsClosed)
            return false;
        return (Omegonprocam_Snap(_handle, nResolutionIndex) >= 0);
    }

VB.NET和C#是类似的, 不另说明.

# 6. Python

Omegonprocam支持Python(版本3.0及以上)开发, 请import omegonprocam导入omegonprocam.py, 参考示例代码simplest.py和qt.py.

请注意omegonprocam.Omegonprocam python包装类的实例通过类方法(classmethod)Open或者OpenByIndex得到, 而不是通常的obj = omegonprocam.Omegonprocam().

绝大多数Omegonprocam类的方法都通过ctypes调用至omegonprocam.dll/so/dylib中对应的原生C/C++ Omegonprocam_xxx函数. 所以, 关于Omegonprocam_xxx的文档说明都适用于python中的对应方法.

参见omegonprocam.py中的__errcheck, 原始的HRESULT返回值被映射成HRESULTException异常(win32平台从OSError继承).

omegonprocam dll/so/dylib库文件请和omegonprocam.py存放在同一目录.

# 7. Java

Omegonprocam支持Java开发. omegonprocam.java使用JNA调用至omegonprocam.dll/so/dylib. 把omegonprocam.java拷贝到你的JAVA工程中使用, 请参考示例代码simplest.java(控制台程序), javafx.java, swing.java.

请注意omegonprocam java包装类的实例通过静态方法Open或者OpenByIndex得到, 而不是通常的obj = new omegonprocam()(构造函数特意是私有的).

绝大多数omegonprocam类的方法都通过JNA调用至omegonprocam.dll/so/dylib中对应的原生C/C++ Omegonprocam_xxx函数. 所以, 关于Omegonprocam_xxx的文档说明都适用于java中的对应方法.

参见omegonprocam.java中的errcheck, 原始的HRESULT返回值被映射成HRESULTException异常.

提醒: (1)从github下载jna-*.jar并加入依赖库; (2)omegonprocam.dll/so/dylib放在合适目录

# 8. 示例

名称 | 平台 | 语言 | 依赖 | 界面 | 描述
demosimplest | Win32 Linux macOS Android | C++ |  | console | 最简单的示例, 大约70行代码. 截图.
demowait | 不使用回调函数, 使用Omegonprocam_WaitImageV3获取图像, 大约60行代码.
demomulti | 打开所有枚举到的相机(可能多台)并获取图像, 大约90行代码.
demostill | 最简单的静态图像抓拍, 大约120行代码.
demosofttrigger | 最简单的软触发示例, 大约80行代码.
demotriggersync | 同步软触发(TriggerSync)示例, 大约80行代码.
demoexternaltrigger | 最简单的外部触发示例, 大约130行代码.
demotriggerout | 最简单的输出信号示例, 大约150行代码.
demoraw | RAW数据, 静态抓拍以及保存RAW数据到*.raw文件, 大约140行代码. 截图.
demostillraw | 静态RAW抓拍并保存到*.raw文件, 大约140行代码.
demoqt | Win32 Linux macOS | Qt | GUI | Qt示例, 截图. 枚举设备, 打开设备, 预览视频, 抓拍(静态)图像, 设置分辨率, 保存图像到文件, 设置自动曝光和白平衡, 帧率(fps)计算, 等等. 这个示例使用Pull Mode机制, StartPullModeWithCallback
demotwoqt | Qt示例, 截图. 同时打开2台相机
democpp | Win32 | ATL/WTL | 截图. 枚举设备(响应设备插入/拔出通知), 初始化支持GigE, 打开设备, 预览视频, 抓拍图像, 设置分辨率, 触发, 多种图片格式(.bmp, .jpg, .png等)保存图像到文件, wmv格式录像, 触发模式, IO控制, 读写EEPROM/FLASH等等. 这个示例使用Pull Mode机制. 为了保持代码整洁, 示例使用的WTL库可以从这个链接下载http://sourceforge.net/projects/wtl
democallback | 截图. 使用Pull Mode模式, StartPullModeWithCallback
demopush | 截图. 使用Push Mode机制, StartPushModeV4
demomono | 演示黑白相机的8和16bits
democns | 截图. 一致性测试: 图像平均划分成m*n个区域, 每个区域取中心的小块区域计算平均值, 把平均值连成线条, 查看线条上下波动幅度.
triggertest | 截图. 软触发测试, 使用后台线程保存图像文件到磁盘(推荐SSD, 否则当磁盘速度不足时, 会导致存盘速度跟不上, 队列中的图像越攒越多, 消耗内存也越来越大).
demomfc | MFC | 截图. 打开设备, 预览视频, 抓拍图像, 设置分辨率, 多种图片格式(.bmp, .jpg, .png等)保存图像到文件, 等等. 这个示例使用Pull Mode机制
autotest | 截图. 自动测试工具(用于自动测试开关相机, 分辨率切换, 抓拍, ROI, 位深度切换等等)
demowpf | .NET | C# | WPF | winwpf示例, 截图. 支持枚举设备, 打开设备, 预览视频, 抓拍(静态)图像, 保存图片到文件, 设置自动曝光和白平衡, 帧率(fps)计算, 等等. 这个示例使用Pull Mode机制, StartPullModeWithCallback
demowinformcs | WinForm | winform示例, 截图. 支持枚举设备, 打开设备, 预览视频, 抓拍(静态)图像, 保存图片到文件, 设置自动曝光和白平衡, 帧率(fps)计算, 等等. 这个示例使用Pull Mode机制, StartPullModeWithCallback
demotwocs | winform示例, 截图. 同时打开2台相机, 使用Pull Mode机制, StartPullModeWithCallback
demowinformvb | VB.NET | winform示例, 截图. 支持枚举设备, 打开设备, 预览视频, 抓拍(静态)图像, 保存图片到文件, 设置自动曝光和白平衡, 帧率(fps)计算, 等等. 这个示例使用Pull Mode机制, StartPullModeWithCallback
demouwp | WinRT | C# |  | UWP(Universal Windows Platform)简单示例, 截图 编译运行示例之前请注意文件Package.appxmanifest中的DeviceCapability下的vid
demoandroid | Android | C++, Java | Android示例
demojava | simplest | Win32 Linux macOS | Java | jna | console | 最简单java示例. IntelliJ工程
javafx | GUI | javafx示例. IntelliJ工程
swing | swing示例. IntelliJ工程
demopython | simplest | Python |  | console | 最简单python示例
qt | PyQt | GUI | PyQt示例, 截图.
demodshow | DirectShow | C++ | MFC | DirectShow示例
amcap |  | 微软directshow示例, https://github.com/microsoft/Windows-classic-samples/tree/main/Samples/Win7Samples/multimedia/directshow/capture/amcap
LVDemo1 | LabView |  |  | Labview示例单台相机, 截图
LVDemo2 | Labview示例同时打开两台相机
LVDemo3 | Labview示例, 截图. 打开设备, 预览视频, 抓拍(静态)图像, 设置分辨率, 设置自动曝光, 位深度切换, 颜色调整, 白(黑)平衡设置, 数字binning设置, 平场(暗场)校正, 等等.
imagepro | liveedf | Win32 | C++ | Qt | Qt示例, snapshot.
C# | WinForm | C#示例, snapshot.
livestack | C++ | Qt | Qt示例, snapshot.
C# | WinForm | C#示例, snapshot.

# 9. 更新历史

v56: 性能提升: RAW模式下减少帧数据copy

v55: 增加支持HDR Pixel Format

v54: 增加支持GigE. 请参阅这里

v53: 增加OmegonprocamFrameInfoV3, Omegonprocam_PullImageV3, Omegonprocam_StartPushModeV4

v52: 安卓Java侧传递文件描述符给Omegonprocam_Open打开相机. 请参阅这里

v51: 支持自动曝光“单次”模式. 请参阅这里

v50: Windows(x86/x64), Linux(x64), Android(x64)平台上SIMD加速
前端和后端队列长度: OMEGONPROCAM_OPTION_FRONTEND_DEQUE_LENGTH和OMEGONPROCAM_OPTION_BACKEND_DEQUE_LENGTH

v49: 增加支持相机配置的保存和加载. 请参阅这里

v48: 硬件事件. 请参阅这里和这里和这里

v47: 硬件Level Range. 请参阅这里和这里

v46: 增加Denose支持, 请参阅这里

v45: 增加支持sequencer trigger, UART, 混合触发(外触发同时启用软件触发)

v44: 扩充了实时realtime模式, 请参阅这里
增加OMEGONPROCAM_OPTION_CALLBACK_THREAD和OMEGONPROCAM_OPTION_FRAME_DEQUE_LENGTH

v43: 触发模式下发生错误时, 可以用OMEGONPROCAM_OPTION_RELOAD恢复最后一帧的数据

v42: 帧率精确控制和带宽, 请参阅这里和OMEGONPROCAM_FLAG_PRECISE_FRAMERATE

v41: 增加包超时, 请参阅这里

v40: 增加自动测试工具, 见samples\autotest

v39: 更新C#/VB.NET/Java/Python

v38: 增加运行时修改字节序, BGR/RGB, 请参阅这里

v37: 增加Android支持
增加Omegonprocam_StartPushModeV3 (Omegonprocam_StartPushModeV2和Omegonprocam_StartPushMode过时)

v36: 增加Java支持. 请参阅这里

v35: 增加Python支持. 请参阅这里

v34: 自动对焦和对焦马达

v33: 扩充OMEGONPROCAM_OPTION_AGAIN至OMEGONPROCAM_OPTION_AUTOEXP_POLICY, 支持更多选项. 请参阅这里

v32: 增加支持Windows 10 on ARM和ARM64, 包括Desktop和WinRT

v31: 增加Omegonprocam_deBayerV2, 支持RGB48和RGB64

v30: 增加OMEGONPROCAM_FLAG_CGHDR

v29: 增加OmegonprocamFrameInfoV2以及PullImageV2和StartPushModeV2一组函数, 一些相机支持帧序号和帧时间戳. 请参阅这里

v28: 增加Omegonprocam_read_Pipe/Omegonprocam_write_Pipe/Omegonprocam_feed_Pipe

v27: 增加Omegonprocam_SnapN, 静态抓拍支持多张图片, 请参阅这里和decmpcpp

v26: 增加恢复出厂设置, OMEGONPROCAM_OPTION_FACTORY

v25: 增加锐化, OMEGONPROCAM_OPTION_SHARPENING

v24: 增加曝光时间的50/60HZ约束

v23: 增加Linux armhf、armel和arm64的支持
增加FFC和DFC, 请参阅这里和这里

v22: 增加OMEGONPROCAM_OPTION_DDR_DEPTH, 请参阅这里

v21: 增加Omegonprocam_IoControl

v20: 增加Omegonprocam_EnumV2, OmegonprocamModelV2, OmegonprocamDeviceV2; (Omegonprocam_Enum, OmegonprocamModel和OmegonprocamInst过时)
增加Pixel Format, 见OMEGONPROCAM_OPTION_PIXEL_FORMAT; (OMEGONPROCAM_OPTION_BITDEPTH的超集)
增加平场校正(Flat Field Correction)

v19: 增加黑平衡: 请参阅这里

v18: 增加Omegonprocam_get_Revision

v17: 增加OMEGONPROCAM_OPTION_ROTATE

v16: 增加OMEGONPROCAM_FLAG_DDR, 使用超大容量DDR(Double Data Rate SDRAM)作帧缓冲

v15: 增加OMEGONPROCAM_OPTION_BINNING

v14: 增加对WinRT / UWP (Universal Windows Platform) / Windows Store App的支持

v13: 支持行间隔(Row Pitch, Stride), 请参阅Omegonprocam_PullImageWithRowPitch和Omegonprocam_PullStillImageWithRowPitch

v12: 支持RGB32, 8位灰度, 16位灰度, 请参阅这里

v11: 暗电平(Black Level), 请参阅这里

v10: Demosaic算法, 请参阅这里

v9: 直方图数据类型从double改成float

v8: 支持模拟触发模式, 请参阅这里

v7: 位深度>8时支持RGB48输出, 请参阅这里

v6: 支持触发(Trigger)模式, 请参阅这里

v5: 白平衡的两种模式: Temp/Tint模式 vs RGB Gain模式, 请参阅这里

v4: 支持ROI (Region Of Interest), 请参阅这里

v3: 支持更多的位深度(bitdepth): 10bits, 12bits, 14bits, 16bits

v2: 支持RAW模式, 请参阅这里和这里；增加对Linux和macOS的支持

v1: 初始发布