# Omegonprocam API 手册

# 1. 版本和平台

- 版本:39.15325.2019.0810

- 平台
  - Win32:
    - x86: XP SP3及以上版本; CPU至少需要支持SSE2指令集
    - x64: Win7及以上版本
    - arm: Win10及以上版本
    - arm64: Win10及以上版本
  - WinRT: x86, x64, arm, arm64；Windows 10或以上版本
  - macOS: universal (x64 + x86)；macOS 10.10或以上版本
  - Linux: 内核2.6.27及以上
    - x86: CPU至少需要支持SSE3指令集；GLIBC 2.8及以上.
    - x64: GLIBC 2.14及以上.
    - armel: GLIBC 2.17及以上；由toolchain arm-linux-gnueabi(版本4.9.2)编译
    - armhf: GLIBC 2.17及以上；由toolchain arm-linux-gnueabihf(版本4.9.2)编译
    - arm64: GLIBC 2.17及以上；由toolchain aarch64-linux-gnu(版本4.9.2)编译
  - Android: arm, arm64, x86, x64; built by android-ndk-r18b; __ANDROID_API__ = 23

# 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.lib, x86 lib文件
    > omegonprocam.dll, x86 动态库文件
    > democpp.exe, x86 C++ demo执行程序

  - x64

    > omegonprocam.lib, x64 lib文件
    > omegonprocam.dll, x64 动态库文件
    > democpp.exe, x64 C++ demo 执行程序

  - arm

    > omegonprocam.lib, arm lib文件
    > omegonprocam.dll, arm 动态库文件

  - arm64

    > omegonprocam.lib, arm64 lib文件
    > omegonprocam.dll, arm64 动态库文件

  - 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.(微软似乎限制了DeviceCapability下的Device条目不超过100)

    > demouwp.zip是一个uwp简单例子，编译运行例子之前请修改文件Package.appxmanifest中的DeviceCapability下的vid和pid.

  - drivers (2017.1.1之后生产的相机支持WinUSB，在Windows8及以上版本上不再需要安装驱动)

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

  - samples
    1. democpp, C++例子.本例子演示了枚举设备，打开设备，预览视频，抓拍图像，设置分辨率，触发，多种图片格式(.bmp, .jpg, .png等)保存图像到文件，wmv格式录像，触发模式，IO控制等等.这个例子使用了Pull Mode机制. 为了保持代码整洁, 例子使用的WTL库可以从这个链接下载http://sourceforge.net/projects/wtl/
    2. demopush, C++例子，使用Push Mode机制, StartPushModeV3.
    3. demomfc, 一个简单C++例子，使用MFC作为GUI库，支持打开设备，预览视频，抓拍图像, 设置分辨率, 多种图片格式(.bmp, .jpg, .png等)保存图像到文件,等等.这个例子使用了Pull Mode机制.
    4. demomono, 一个简单C++例子，演示黑白相机的8和16bits.
    5. demowinformcs1, C# winform例子，支持打开设备，预览视频，抓拍图像，保存图片到文件，设置白平衡. 这个例子使用了Pull Mode机制, StartPullModeWithWndMsg.
    6. demowinformcs2, C# winform例子，支持打开设备，预览视频，抓拍图像，保存图片到文件，设置白平衡. 这个例子使用了Pull Mode机制, StartPullModeWithCallback.
    7. demowinformcs3, C# winform例子，支持打开设备，预览视频，抓拍图像，保存图片到文件，设置白平衡. 这个例子使用了Push Mode机制, StartPushModeV3.
    8. demowinformvb, VB.NET winform例子，支持打开设备，预览视频，抓拍图像，保存图片到文件，设置白平衡. 这个例子使用了Pull Mode机制.

- linux: Linux平台文件
  - udev: 99-omegonprocam.rules, udev rule文件. 请参考: http://reactivated.net/writing_udev_rules.html
  - c#: omegonprocam.cs, for .Net Core C#. omegonprocam.cs使用P/Invoke调用至libomegonprocam.so. 请把omegonprocam.cs 拷贝到你的C#工程中使用.
  - 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

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

- mac: macOS平台文件

- python: omegonprocam.py和例子代码(控制台和pyQt)

- java: omegonprocam.java和例子代码(控制台和Swing)

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

- sample
  - demosimplest, 最简单的例子,大约60行代码
  - demoraw, RAW数据和静态抓拍,大约120行代码

- extras
  - directshow: DirectShow SDK和demo程序
  - twain: TWAIN SDK
  - labview: Labview SDK和demo程序
  - matlab: MatLab demo程序

# 3. 概念和术语

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

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

- Pull Mode, omegonprocam 扮演被动角色，应用程序从omegonprocam“拉”图像数据. omegonprocam内部线程从相机获得图像数据,并保存到内部缓存中, 然后通知应用程序来取图像数据. 应用程序可以调用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_PullImage(V2)“拉”图像数据
> OMEGONPROCAM_EVENT_STILLIMAGE | 静态图片数据到达(Omegonprocam_Snap或Omegonprocam_SnapN引发).使用Omegonprocam_PullStillImage(V2)“拉”图像数据
> OMEGONPROCAM_EVENT_ERROR | 一般性错误，数据采集不能继续
> OMEGONPROCAM_EVENT_DISCONNECTED | 相机断开连接，如被拔出
> OMEGONPROCAM_EVENT_TIMEOUT | 抓取视频帧超时错误，数据采集不能继续
> OMEGONPROCAM_EVENT_TRIGGERFAIL | 触发失败(如帧数据错误或超时)
> OMEGONPROCAM_EVENT_BLACK | 黑平衡参数发生改变
> OMEGONPROCAM_EVENT_FFC | 平场校正(flat field correction)状态发生改变
> OMEGONPROCAM_EVENT_DFC | 暗场校正(dark field correction)状态发生改变
> OMEGONPROCAM_EVENT_FACTORY | 恢复出厂设置

- Push Mode情况下, omegonprocam作为主动方，一旦内部底层线程从camera中抓取到图像数据，就通过POMEGONPROCAM_DATA_CALLBACK_V3把图像数据“推”给应用程序 (请注意这个回调函数是在omegonprocam内部线程上下文中执行的). 调用Omegonprocam_StartPushMode函数进入推模式.推模式比较复杂，有一些特别注意事项（如多线程问题，也不能在POMEGONPROCAM_DATA_CALLBACK_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_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_AwbOnePush等等）都无意义.

用户可以通过OMEGONPROCAM_OPTION_RAW调用函数Omegonprocam_put_Option来切换这两种模式.请注意切换模式必须在调用相机开启函数(Omegonprocam_StartPullModeWithWndMsg或Omegonprocam_StartPullModeWithCallback或Omegonprocam_StartPushModeV3)之前.

## 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_AwbOnePush执行自动白平衡. 当白平衡参数改变时，发送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_AwbOnePush. 而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_AwbOnePush不能使用，永远返回E_NOTIMPL

> Omegonprocam_Open的id参数之前加'@'字符表示使用RGB Gain模式的白平衡.如果想使用RGB Gain模式白平衡，假设id参数是"abcdef"，则传入参数"@abcdef".

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

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

## e. 触发模式

1. 什么是触发

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

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

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

3. 软件触发

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

4. 外部触发

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

5. 模拟触发

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

6. 怎样进入触发模式

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

> >     #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 = 外部触发模式, 默认值 =  0 */

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

7. 怎样触发相机

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

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

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

8. 触发超时

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

# 4. 函数

- ## HRESULT返回值

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

  名称 | 说明 | 值
  S_OK | Operation successful (成功) | 0x00000000
  S_FALSE | Operation successful (成功) | 0x00000001
  E_FAIL | Unspecified failure (未指定的错误) | 0x80004005
  E_ACCESSDENIED | General access denied error (拒绝访问) | 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 (无效指针) | 0x80004003
  E_UNEXPECTED | Unexpected failure (灾难性故障) | 0x8000FFFF
  E_WRONG_THREAD | Wrong thread (函数在错误的线程上下文中被调用) | 0x8001010E
  E_GEN_FAILURE | Device not functioning (设备不相应) | 0x8007001F

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

- ## 调用规范(Calling Convention)

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

  在macOS, Linux和Android使用__cdecl

- ## 回调函数: POMEGONPROCAM_EVENT_CALLBACK和POMEGONPROCAM_DATA_CALLBACK_V3

  这些回调函数是从omegonprocam.dll的内部线程上下文中回调出来，所以，非常有必要关注多线程问题. 请尽量保持回调函数代码的简洁，并且快速返回.
  回调函数上下文有以下限制:
  (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.

- ## 坐标

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

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

- ## Omegonprocam_EnumV2

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

  参数：OmegonprocamDeviceV2缓冲区

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

  > 如下面的代码片段：

  >     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 */
  >         OmegonprocamResolution  res[OMEGONPROCAM_MAX];
  >     }OmegonprocamModelV2;

  > 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_PUTTEMPERATURE | 支持设置传感器目标温度, Omegonprocam_put_Temperature
  > OMEGONPROCAM_FLAG_RAW10 | Pixel format, RAW 10 bits
  > OMEGONPROCAM_FLAG_RAW12 | Pixel format, RAW 12 bits
  > OMEGONPROCAM_FLAG_RAW14 | Pixel format, RAW 14 bits
  > OMEGONPROCAM_FLAG_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_YUV411 | pixel format, yuv411
  > OMEGONPROCAM_FLAG_YUV422 | pixel format, yuv422
  > OMEGONPROCAM_FLAG_YUV444 | pixel format, yuv444
  > OMEGONPROCAM_FLAG_RGB888 | pixel format, RGB888
  > OMEGONPROCAM_FLAG_RAW8 | pixel format, RAW 8 bits
  > OMEGONPROCAM_FLAG_GMCY8 | pixel format, GMCY, 8bits
  > OMEGONPROCAM_FLAG_GMCY12 | pixel format, GMCY, 12 btis
  > OMEGONPROCAM_FLAG_GLOBALSHUTTER | 全局快门
  > maxspeed | 最大速度等级，和函数Omegonprocam_get_MaxSpeed返回值相同. 速度范围是[0, maxspeed]. 可以通过Omegonprocam_put_Speed设置速度等级, Omegonprocam_get_Speed获取当前速度等级
  > preview | 预览分辨率的个数. 和函数Omegonprocam_get_ResolutionNumber返回值相同
  > still | 静态抓拍分辨率个数, 0表示不支持静态抓拍. 和函数Omegonprocam_get_StillResolutionNumber返回值相同
  > res | 分辨率宽度和高度

- ## Omegonprocam_HotPlug

  返回值：无

  参数：

  > POMEGONPROCAM_HOTPLUG pHotPlugCallback: 回调函数

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

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

  说明：

  > 本函数只存在于macOS, Linux和Android平台.

  > 在Windows平台处理设备插入/拔出通知，请参阅MSDN(Device Management, Detecting Media Insertion or Removal).

  > 在Linux/macOS/Android平台，如果需要处理设备插入/拔出通知，调用本函数注册回调函数. 当设备被插入/拔出时时，程序通过回调函数得到通知，然后调用Omegonprocam_EnumV2重新枚举设备即可.

  > macOS平台下也可以使用IONotificationPortCreate系列API.

  > 建议: 当设备插入通知到达时，建议不要立即打开句柄，而是延时一小段时间（如200毫秒）之后再打开，这样稳定性更好.

- ## Omegonprocam_Open

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

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

  说明：打开相机实例.

- ## Omegonprocam_Close

  返回值：无

  参数：HOmegonprocam句柄

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

- ## Omegonprocam_StartPullModeWithWndMsg, Omegonprocam_StartPullModeWithCallback

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

  参数：

  > HOmegonprocam h：由Omegonprocam_Open打开的实例句柄

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

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

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

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

  > 请参阅这里.

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

- ## Omegonprocam_PullImageV2, Omegonprocam_PullStillImageV2, Omegonprocam_PullImageWithRowPitchV2, Omegonprocam_PullStillImageWithRowPitchV2, Omegonprocam_PullImage, Omegonprocam_PullStillImage, Omegonprocam_PullImageWithRowPitch, Omegonprocam_PullStillImageWithRowPitch

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

  参数：

  > HOmegonprocam h：由Omegonprocam_Open打开的实例句柄

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

  > int bits：图像颜色位数，支持24, 32, 48, 8和16，分别代表RGB24, RGB32, RGB48, 8位灰度, 16位灰度图像. 本参数在RAW模式下没有意义，被忽略

  > int rowPitch: 行间距(Stride, 跨距)，行与行之间的间距，=0表示默认使用行间距

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

  > OmegonprocamFrameInfoV2* pInfo：输出参数，图像Info. 一些相机支持帧序号和帧时间戳，其它不支持的相机始终为0

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

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

  > 格式 | 默认行间距(跨距)
  > RGB | RGB24 | TDIBWIDTHBYTES(24 * Width)
  > RGB32 | Width * 4
  > RGB48 | TDIBWIDTHBYTES(48 * Width)
  > RGB8灰度图像 | TDIBWIDTHBYTES(8 * Width)
  > RAW | 8bits模式 | Width
  > 10bits, 12bits, 14bits, 16bits模式 | Width * 2

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

- ## Omegonprocam_StartPushModeV3

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

  参数：

  > HOmegonprocam h：由Omegonprocam_Open打开的实例句柄

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

  > POMEGONPROCAM_EVENT_CALLBACK pEventCallback, void* pEventCallbackContext:

  > typedef void (*POMEGONPROCAM_DATA_CALLBACK_V3)(const void* pData, const OmegonprocamFrameInfoV2* pInfo, int bSnap, void* pCallbackCtx);

  > 请参阅这里.

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

  说明：开启相机实例.

- ## Omegonprocam_Stop

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

  参数：HOmegonprocam句柄

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

  > 步骤1：调用Omegonprocam_Stop停止

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

  > 步骤3：调用Omegonprocam_StartPullModeWithWndMsg或Omegonprocam_StartPullModeWithCallback或Omegonprocam_StartPushModeV3重新开启

- ## Omegonprocam_Pause

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

  参数：HOmegonprocam句柄

  说明：暂停或者继续相机实例

- ## Omegonprocam_Snap, Omegonprocam_SnapN

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned nResolutionIndex：想要抓拍的分辨率序号.

  > unsigned nNum: 抓拍图像张数.

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

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

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

- ## Omegonprocam_Trigger

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

  参数：

  > HOmegonprocam h：相机实例句柄

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

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

- ## Omegonprocam_put_Size, Omegonprocam_get_Size, Omegonprocam_put_eSize, Omegonprocam_get_eSize

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned nResolutionIndex：当前分辨率序号

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

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

  > 设置分辨率应该在Omegonprocam_StartPullModeWithWndMsg或Omegonprocam_StartPullModeWithCallback或Omegonprocam_StartPushModeV3之前进行.
  > 有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

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned nResolutionIndex：当前分辨率序号

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

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

  > 设置分辨率应该在Omegonprocam_StartPullModeWithWndMsg或Omegonprocam_StartPullModeWithCallback或Omegonprocam_StartPushModeV3之前进行.
  > 有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_Roi, Omegonprocam_get_Roi

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

  参数：

  > HOmegonprocam h: 相机实例句柄

  > unsigned xOffset: x偏移，必须是偶数

  > unsigned yOffset: y偏移，必须是偶数

  > unsigned xWidth: 宽度. 最小值16，必须是偶数

  > unsigned yHeight: 高度. 最小值16，必须是偶数

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

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

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

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

- ## Omegonprocam_get_ResolutionNumber, Omegonprocam_get_Resolution

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned nResolutionIndex：分辨率序号

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

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

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

- ## Omegonprocam_get_RawFormat

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned* nFourCC：格式类型，见下表

  > unsigned* bitsperpixel：Bits per Pixel，如8, 10, 12, 14, 16, 24

  > #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

  > MAKEFOURCC('G', 'B', 'R', 'G')

  > GBGBGB...
  > RGRGRG...
  > GBGBGB...
  > RGRGRG...
  > ...
  > 请参阅这里

  > MAKEFOURCC('R', 'G', 'G', 'B')

  > RGRGRG...
  > GBGBGB...
  > RGRGRG...
  > GBGBGB...
  > ...

  > MAKEFOURCC('B', 'G', 'G', 'R')

  > BGBGBG...
  > GRGRGR...
  > BGBGBG...
  > GRGRGR...
  > ...

  > MAKEFOURCC('G', 'R', 'B', 'G')

  > GRGRGR...
  > BGBGBG...
  > GRGRGR...
  > BGBGBG...
  > ...

  > MAKEFOURCC('V', 'U', 'Y', 'Y') | YUV4:2:2, 请参阅: http://www.fourcc.org
  > MAKEFOURCC('U', 'Y', 'V', 'Y') | YUV4:2:2
  > MAKEFOURCC('Y', 'Y', 'Y', 'Y') | 黑白相机

- ## Omegonprocam_put_Option, Omegonprocam_get_Option

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned iOption：选项，见下表

  > int iValue：值，见下表

  > 选项 | 说明 | 默认值 | 是否可以在调用Omegonprocam_StartPullModeWithWndMsg或Omegonprocam_StartPullModeWithCallback或Omegonprocam_StartPushModeV3之后设置该值 The value can be changed on-the-fly?
  > OMEGONPROCAM_OPTION_RAW | 0表示使用RGB模式. 1表示RAW模式，直接获取底层传感器数据. | 0 | 否 (在相机已经开启的情况下，设置本选项，函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_BITDEPTH | 一些型号的相机支持大于8Bits的位深度(Bit Depth)，如10,12,14,16等. 0表示使用8Bits位深度. 1表示使用本相机支持的最高位深度 | NA | 是 (启动相机之后不建议频繁修改，最好是在启动之前就设置好)
  > OMEGONPROCAM_OPTION_FAN | 一些型号的相机支持制冷风扇. 0 = 关闭风扇 [1, max] = 风扇速率 | NA | 是
  > OMEGONPROCAM_OPTION_TEC | 一些型号的相机支持开启关闭TEC制冷装置. 0 = 关闭TEC制冷 1 = 开启TEC制冷 | 1 | 是
  > OMEGONPROCAM_OPTION_WBGAIN | 0 = 关闭内部白平衡增益 1 = 开启内部白平衡增益 | 1 | 是
  > OMEGONPROCAM_OPTION_TRIGGER | 0 = 视频模式 1 = 软件或模拟触发模式 2 = 外部触发(模式 | 0 | 是
  > OMEGONPROCAM_OPTION_RGB | 0 = 使用RGB24 1 = 在位深度>8时，启用RGB48格式 2 = 使用RGB32 3 = 8位灰度(只对黑白相机有效) 4 = 16位灰度(只对黑白相机并且位深度>8时有效) | 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, 默认不倒置 | 否
  > OMEGONPROCAM_OPTION_TECTARGET | 获取和设置TEC制冷的目标温度，单位0.1℃. 例如, 125表示12.5℃，-35表示-3.5℃ | NA | 是
  > OMEGONPROCAM_OPTION_AUTOEXP_POLICY | 自动曝光策略: 0: 仅曝光 1: 曝光优先 2: 仅模拟增益 3: 模拟增益优先 | 1 | 是
  > OMEGONPROCAM_OPTION_AUTOEXP_THRESHOLD | 自动曝光阈值,范围: [5~15] | 5 | 是
  > OMEGONPROCAM_OPTION_FRAMERATE | 帧率限制（每秒帧数），范围[0, 63]. 触发模式下帧率控制自动禁用. | 0 (表示不限制) | 否 (在相机已经开启的情况下，设置本选项，函数返回E_UNEXPECTED)
  > OMEGONPROCAM_OPTION_BLACKLEVEL | 暗电平(Black Level) 对于不支持暗电平的相机返回E_NOTIMPL. | 0 | 是
  > OMEGONPROCAM_OPTION_MULTITHREAD | 多线程图像处理 | 1 | 否 (在相机已经开启的情况下，设置本选项，函数返回E_UNEXPECTED)

  > OMEGONPROCAM_OPTION_BINNING

  > 数字binning:
  > 0x01 (无binning)
  > 0x02 (加法, 2*2)
  > 0x03 (加法, 3*3)
  > 0x04 (加法, 4*4)
  > 0x82 (平均, 2*2)
  > 0x83 (平均, 3*3)
  > 0x84 (平均, 4*4)

  > 1

  > 是

  > OMEGONPROCAM_OPTION_ROTATE | 顺时针旋转: 0°, 90°, 180°, 270° | 0 | 是
  > OMEGONPROCAM_OPTION_CG | 转换增益(Conversion Gain): 0: LCG 1: HCG 2: HDR | NA | 是
  > OMEGONPROCAM_OPTION_PIXEL_FORMAT | pixel format | NA | 是 (启动相机之后不建议频繁修改，最好是在启动之前就设置好)
  > 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) >> 8): 平均数

  > 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) >> 8): 平均数

  > 0

  > 是

  > OMEGONPROCAM_OPTION_SHARPENING

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

  > > 强度(strength): [0, 500], default: 0 (disable)

  > > 半径(radius): [1, 10]

  > > 阈值(threshold): [0, 255]

  > 0

  > 是

  > OMEGONPROCAM_OPTION_FACTORY | 恢复出厂设置. 请注意恢复出厂设置可能导致分辨率改变 Only put | 恒为0 | 是
  > OMEGONPROCAM_OPTION_TEC_VOLTAGE | 获取TEC的当前工作电压，单位0.1伏，如59代表5.9伏. 请不要过于频繁获取本值，建议间隔2秒或以上 Only get | NA | NA
  > OMEGONPROCAM_OPTION_TEC_VOLTAGE_MAX | 获取TEC的最大工作电压，单位0.1伏，如59代表5.9伏. Only get | NA | NA
  > OMEGONPROCAM_OPTION_DEVICE_RESET | 重置相机的usb连接，相当于模拟一次重新插拔. Only put | NA | NA
  > OMEGONPROCAM_OPTION_AFPOSITION | 自动对焦位置 | NA | 是
  > OMEGONPROCAM_OPTION_AFMODE | 自动对焦模式: 0: 手动 1: 自动 2: 单击 3: 共轭校准 | NA | 是
  > OMEGONPROCAM_OPTION_AFZONE | 自动对焦区域 | NA | 是

  > OMEGONPROCAM_OPTION_AFFEEDBACK

  > 自动对焦反馈信息:
  > 0: 未知
  > 1: 聚焦
  > 2: 正在对焦
  > 3: 离焦
  > 4: 上
  > 5: 下
  > Only get

  > NA

  > 是

  > OMEGONPROCAM_OPTION_TESTPATTERN

  > test pattern:
  > 0: TestPattern Off
  > 3: monochrome diagonal stripes
  > 5: monochrome vertical stripes
  > 7: monochrome horizontal stripes
  > 9: chromatic diagonal stripes
  > Only put

  > 0

  > 是

  > OMEGONPROCAM_OPTION_NOFRAME_TIMEOUT | 一定时间没有获取到任何一帧完整数据，就报错. 1 = 使能本特性; 0 = 禁用 | 0 | 是

  > OMEGONPROCAM_OPTION_THREAD_PRIORITY

  > 设置内部线程的优先级.
  > 0 = THREAD_PRIORITY_NORMAL;
  > 1 = THREAD_PRIORITY_ABOVE_NORMAL;
  > 2 = THREAD_PRIORITY_HIGHEST;
  > 3 = THREAD_PRIORITY_TIME_CRITICAL;
  > 请参阅: SetThreadPriority
  > 本选项在Linux和macOS平台下被忽略.

  > 1

  > 是

  > OMEGONPROCAM_OPTION_PROCESSMODE | 0：full模式，图像质量更好，但是更耗费CPU. 1: fast模式，图像质量差些，耗费更少的CPU. 根据具体的使用情况选择FULL模式还是FAST模式. | 0 | 是
  > OMEGONPROCAM_OPTION_LINEAR | 0 = 关闭内部linear tone mapping 1 = 开启内部linear tone mapping | 1 | 是
  > OMEGONPROCAM_OPTION_CURVE | 0 = 关闭内部curve tone mapping 1 = 开启内部多项式拟合curve tone mapping 2 = 开启内部对数拟合tone mapping | 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 interpolation)
  > 2 = PPG(Patterned Pixel Grouping interpolation)
  > 3 = AHD(Adaptive Homogeneity-Directed interpolation)
  > 对于黑白相机始终返回E_NOTIMPL.

  > 0

  > 是

  > OMEGONPROCAM_OPTION_DEMOSAIC_VIDEO | 视频的Demosaic算法 | 0 | 是
  > OMEGONPROCAM_OPTION_DEMOSAIC_STILL | 静态图像的Demosaic算法 对于不支持静态抓拍的相机返回E_NOTIMPL. | 0 | 是

  > 重要提示:

  > a. 部分设置只可以在相机没有Start的情况下修改，也即不能被changed on-the-fly.

  > b. 不允许在POMEGONPROCAM_EVENT_CALLBACK和POMEGONPROCAM_DATA_CALLBACK_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 bEnable：TRUE or FALSE

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

- ## Omegonprocam_get_AutoExpoEnable, Omegonprocam_put_AutoExpoEnable, Omegonprocam_get_AutoExpoTarget, Omegonprocam_put_AutoExpoTarget, Omegonprocam_put_MaxAutoExpoTimeAGain, Omegonprocam_get_MaxAutoExpoTimeAGain, Omegonprocam_put_MinAutoExpoTimeAGain, Omegonprocam_get_MinAutoExpoTimeAGain

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > int bAutoExposure：TRUE or FALSE

  > 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：TRUE or FALSE

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

- ## 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是一个意思.

- ## 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℃.

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

  > 设置传感器目标温度.

- ## 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.

  参数：

  > HOmegonprocam h：相机实例句柄

  > int nTemp, int nTint：色温和Tint

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

- ## Omegonprocam_AwbOnePush

  返回值：HRESULT类型表示成功失败. Temp/Tint模式下起作用，RGB Gain模式下不起作用直接返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机实例句柄

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

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

- ## Omegonprocam_put_WhiteBalanceGain, Omegonprocam_get_WhiteBalanceGain

  返回值：HRESULT类型表示成功失败. RGB Gain模式下起作用，Temp/Tint模式下不起作用直接返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机实例句柄

  > int aGain[3]：RGB增益值

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

- ## Omegonprocam_AwbInit

  返回值：HRESULT类型表示成功失败. RGB Gain模式下起作用，Temp/Tint模式下不起作用直接返回E_NOTIMPL.

  参数：

  > HOmegonprocam h：相机实例句柄

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

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

- ## Omegonprocam_AbbOnePush

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

  参数：

  > HOmegonprocam h：相机实例句柄

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

  说明：调用本函数来触发单次自动黑平衡功能. 当黑平衡参数计算完成的时候, 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%图像高度.

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

- ## Omegonprocam_get_MonoMode

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

  参数：HOmegonprocam h：相机实例句柄

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

- ## Omegonprocam_get_MaxBitDepth

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

  参数：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: 物理像素大小(μ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_EEPROM, Omegonprocam_write_EEPROM

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned addr: EEPROM读写地址

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

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

  > unsigned nBufferLen: 缓冲区长度

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

- ## Omegonprocam_FfcOnePush

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

  参数：

  > HOmegonprocam h：相机实例句柄

- ## Omegonprocam_fcOnePush

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

  参数：

  > HOmegonprocam h：相机实例句柄

- ## Omegonprocam_IoControl

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > unsigned index: IO口序号

  > 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->>下降沿
  > 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, 2, 3 ... 1023
  > OMEGONPROCAM_IOCONTROLTYPE_SET_BURSTCOUNTER |
  > OMEGONPROCAM_IOCONTROLTYPE_GET_COUNTERSOURCE | 计数器模式信号源： 0x00->> 光耦隔离输入 0x01->> GPIO0 0x02->> GPIO1
  > OMEGONPROCAM_IOCONTROLTYPE_SET_COUNTERSOURCE |
  > OMEGONPROCAM_IOCONTROLTYPE_GET_COUNTERVALUE | 计数值：1, 2, 3 ... 1023
  > 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->> 用户输出信号
  > 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_put_ExpoCallback

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > PIOMEGONPROCAM_EXPOSURE_CALLBACK fnExpoProc, void* pExpoCtx：曝光回调函数以及回调上下文.设置fnExpoProc为NULL，表示停止回调.

  说明：一旦设置了非NULL的回调函数，每当曝光时间变化时，回调发生.设置fnExpoProc为NULL，表示不再回调.

- ## Omegonprocam_put_ChromeCallback

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

  参数：

  > HOmegonprocam h：相机实例句柄

  > PIOMEGONPROCAM_CHROME_CALLBACK fnChromeProc, void* pChromeCtx：多色/单色切换回调函数以及回调上下文.设置fnChromeProc为NULL，表示不再回调.

  说明：一旦设置了非NULL的回调函数，每当单色/多色切换时（如调用Omegonprocam_put_Chrome），回调发生.

- ## 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 fnHistogramProc, void* pHistogramCtx：直方图数据的回调函数以及回调上下文

  说明：获取直方图数据

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

  > 参数 | 范围 | 默认值 | 获取 | 设置 | 自动
  > AutoExpoTarget (自动曝光目标亮度) | 16~235 | 120 | Omegonprocam_get_AutoExpoTarget | Omegonprocam_put_AutoExpoTarget |
  > 白平衡 | Temp/Tint模式 | Temp(色温) | 2000~15000 | 6503 | Omegonprocam_get_TempTint | Omegonprocam_put_TempTint | Omegonprocam_AwbOnePush
  > Tint | 200~2500 | 1000
  > RGB Gain模式 | Red Gain | -127~127 | 0 | Omegonprocam_get_WhiteBalanceGain | Omegonprocam_put_WhiteBalanceGain | Omegonprocam_AwbInit
  > Green Gain
  > Blue Gain
  > LevelRange | 0~255 | Low = 0 High = 255 | Omegonprocam_get_LevelRange | Omegonprocam_put_LevelRange | Omegonprocam_LevelRangeAuto
  > Contrast(对比度) | -100~100 | 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(亮度) | -64~64 | 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_MaxAutoExpoTimeAGain | Omegonprocam_put_MaxAutoExpoTimeAGain |
  > Gain (增益) |  | 500
  > Min(最小) | Exposure Time (曝光时间) |  | 0 | Omegonprocam_get_MinAutoExpoTimeAGain | Omegonprocam_put_MinAutoExpoTimeAGain |
  > Gain (增益) |  | 100

# 5. .NET, C#和VB.NET

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

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

请主意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 (https://github.com/java-native-access/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. 更新历史

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: 支持更多的位深度(bit depth): 10bits, 12bits, 14bits, 16bits

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

v1: 初始发布

# 9. 联系信息

如果在使用Omegonprocam SDK的过程中，碰到任何问题，请与我们联系
网站：www.nimax.com
EMAIL：support@nimax.com