1.6.5660.20150520
ToupCam系列相机(包含UCMOS, WCMOS, LCMOS, U3CMOS, L3CMOS, E3CMOS, ICMOS, GCMOS, UHCCD, EXCCD, SCCCD等型号系列)支持多种API,包括:Native C/C++,.NET/C#/VB.NET, DirectShow, Twain, LabView等等. Native C/C++ API作为底层(Low Level) API相比较其他API的特点是使用纯C/C++开发,不依赖其他的运行时库,接口简洁,控制灵活. 本SDK压缩包包含了所有需要用到的的资源和信息, 目录如下:
toupcam.h, C/C++ 头文件
toupcam.cs, 支持C#. toupcam.cs使用P/Invoke调用至toupcam.dll. 请把toupcam.cs 拷贝到你的C#工程中使用.
toupcam.vb, 支持VB.NET. toupcam.vb使用P/Invoke调用至toupcam.dll. 请把toupcam.vb 拷贝到你的VB.NET工程中使用.
toupcam.cs, 支持C#. toupcam.cs使用P/Invoke调用至toupcam.dll. 请把toupcam.cs 拷贝到你的C#工程中使用.
toupcam.vb, 支持VB.NET. toupcam.vb使用P/Invoke调用至toupcam.dll. 请把toupcam.vb 拷贝到你的VB.NET工程中使用.
toupcam.lib, x86 lib 文件.
toupcam.dll, x86 动态库文件.
toupcamdemocpp.exe, x86 C++ demo执行程序.
toupcam.lib, x64 lib文件.
toupcam.dll, x64 动态库文件.
toupcamdemocpp.exe, x64 C++ demo 执行程序.
x86 文件夹包含x86的内核态驱动文件,包括toupcam.cat, toupcam.inf 和 toupcam.sys.
x64 文件夹包含x64的内核态驱动文件,包括toupcam.cat, toupcam.inf 和 toupcam.sys.
a). toupcamdemocpp, C++例子.本例子演示了枚举设备,打开设备,预览视频,抓拍图像,设置分辨率, 多种图片格式(.bmp, .jpg, .png等)保存图像到文件,wmv格式录像等等.这个例子使用了Pull Mode机制. 为了保持代码整洁, 例子使用的WTL库可以从这个链接下载http://sourceforge.net/projects/wtl/
b). toupcamdemomfc, 一个简单C++例子,使用MFC作为GUI库,支持打开设备,预览视频,抓拍图像, 设置分辨率, 多种图片格式(.bmp, .jpg, .png等)保存图像到文件,等等.这个例子使用了Pull Mode机制.
c). toupcamdemowinformcs1, C# winform例子,支持打开设备,预览视频,抓拍图像,保存图片到文件,设置白平衡. 这个例子使用了Pull Mode机制, StartPullModeWithWndMsg.
d). toupcamdemowinformcs2, C# winform例子,支持打开设备,预览视频,抓拍图像,保存图片到文件,设置白平衡. 这个例子使用了Pull Mode机制, StartPullModeWithCallback.
e). toupcamdemowinformvb, VB.NET winform例子,支持打开设备,预览视频,抓拍图像,保存图片到文件,设置白平衡. 这个例子使用了Pull Mode机制.
a). directshow: DirectShow SDK和demo程序
b). twain: TWAIN SDK和demo程序
c). labview: Labview SDK和demo程序
Toupcam提供了两种模式来获取图像数据: Pull Mode 和 Push Mode. 推荐使用前者,因为它更简单,且在多线程情况下更加不容易出错, 尤其是使用windows消息机制的情况下.
a) 使用Windows消息机制: 通过调用函数 Toupcam_StartPullModeWithWndMsg启动Pull mode模式. 当事件发生时, toupcam会主动发送消息(PostMessage)到指定窗口. 参数WPARAM 是事件类型, 请参考TOUPCAM_EVENT_xxxx的定义. 参数LPARAM保留位使用. 本模式规避了多线程问题,是最简单的方式.(显然,这种方式只支持Windows系统,不支持Linux和MacOSX.)
b) 使用回调函数使用 Toupcam_StartPullModeWithCallback启动Pull mode模式. 当事件发生时, 会调用PTOUPCAM_EVENT_CALLBACK回调函数(请注意这个回掉函数是在toupcam.dll内部线程上下文中执行的,所以不要在回调函数上上下文中调用Toupcam_Stop和Toupcam_Close,否则会死锁).
在Pull Mode 情况下, toupcam不但可以通知应用程序图像数据或者静态图片到达,还可以通知其他事件类型,如下所示:
TOUPCAM_EVENT_EXPOSURE 曝光时间发生改变 TOUPCAM_EVENT_TEMPTINT 白平衡参数发生改变,Temp/Tint模式, 请参阅这里. TOUPCAM_EVENT_WBGAIN 白平衡参数发生改变,RGB Gain模式, 请参阅这里. TOUPCAM_EVENT_IMAGE 视频图像数据到达(视频).使用Toupcam_PullImage“拉”图像数据 TOUPCAM_EVENT_STILLIMAGE 静态图片数据到达(Toupcam_Snap引发).使用Toupcam_PullStillImage“拉”图像数据 TOUPCAM_EVENT_ERROR 发生错误,数据采集不能继续 TOUPCAM_EVENT_DISCONNECTED 相机断开连接,如被拔出
大部分的相机型号都支持所谓静态抓拍的能力,指相机在连续的视频预览过程中,临时切换到另外一个分辨率,抓取一帧静态图片之后,马上把分辨率切换回原始分辨率的过程.
举例来说,UCMOS05100KPA支持3种分辨率,当前视频预览分辨率为1280 * 960, 调用函数Toupcam_Snap(h, 0)静态抓拍分辨率2592 * 1944的静态图片,这时相机临时切换到2592 * 1944的分辨率,抓取一帧数据之后,又把分辨率切换成原来的1280 * 960.
a) 拉模式下,抓拍到静态图片之后,通知外层应用TOUPCAM_EVENT_STILLIMAGE事件, 然后外层应用调用Toupcam_PullStillImage获取静态图片的数据.
b) 推模式下,抓拍到静态图片之后,回调函数PTOUPCAM_DATA_CALLBACK, 参数bSnap设置为TRUE,图片的分辨率等信息在参数pHeader中.
可以通过函数Toupcam_get_StillResolutionNumber的返回值或者结构ToupcamModel的still值来查看是否支持静态抓拍能力.
Toupcam支持两种数据格式: RGB格式(默认)和RAW格式. RAW模式可以通过调用函数Toupcam_put_Option设置参数TOUPCAM_OPTION_RAW为1开启.
用户可以通过TOUPCAM_OPTION_RAW调用函数Toupcam_put_Option来切换这两种模式.请注意切换模式必须在调用相机开启函数(Toupcam_StartPullModeWithWndMsg或Toupcam_StartPullModeWithCallback或Toupcam_StartPushMode)之前.
1. Toupcam支持互相独立的两种模式描述白平衡: a) Temp/Tint模式; b) RGB Gain模式
a) 默认是Temp/Tint模式,在本模式下,使用Temp, Tint这2个参数来控制白平衡. Toupcam_get_TempTint获取值,Toupcam_put_TempTint设置值. Toupcam_AwbOnePush执行自动白平衡. 当白平衡参数改变时,发送TOUPCAM_EVENT_TEMPTINT通知消息.
b) 在RGB Gain模式下,使用3个通道的Gain值来控制白平衡. Toupcam_get_WhiteBalanceGain获取值,Toupcam_put_WhiteBalanceGain设置值. Toupcam_AwbInit执行自动白平衡. 当白平衡参数改变时,发送TOUPCAM_EVENT_WBGAIN通知消息.
两种模式下使用的函数不能混淆:
a) Temp/Tint模式下,必须使用Toupcam_get_TempTint和Toupcam_put_TempTint和Toupcam_AwbOnePush. 而Toupcam_get_WhiteBalanceGain和Toupcam_put_WhiteBalanceGain和Toupcam_AwbInit不能使用,永远返回E_NOTIMPL.
b) RGB Gain模式下,必须使用Toupcam_get_WhiteBalanceGain和Toupcam_put_WhiteBalanceGain和Toupcam_AwbInit. 而Toupcam_get_TempTint和Toupcam_put_TempTint和Toupcam_AwbOnePush不能使用,永远返回E_NOTIMPL
Toupcam_Open的id参数之前加'@'字符表示使用RGB Gain模式的白平衡.如果想使用RGB Gain模式白平衡,假设id参数是"abcdef",则传入参数"@abcdef".
2. 自动白平衡功能, 业界有两种模式, 一种是连续自动白平衡,一种是触发式自动白平衡(one push). 连续自动白平衡功能会一直进行白平衡参数的计算, 触发模式只是在触发的时候才会计算白平衡参数. Toupcam使用了触发式白平衡计算方法因为这种方法在显微镜等领域更加合适和精确. 连续自动白平衡在某些场景情况下会出现错误.
3. 黑白相机不支持白平衡. 以上提到的函数一直返回E_NOTIMPL.
除了连续采集模式以外,一些相机还支持触发采集模式. 在触发模式下,每调用Toupcam_Trigger函数一次采集一帧.
HRESULT在Windows平台上的使用很普遍. OSX和Linux平台上借用之,定义如下:
名称 | 说明 | 值 |
S_OK | Operation successful (成功) | 0x00000000 |
S_FALSE | Operation successful (成功) | 0x00000001 |
E_FAIL | Unspecified failure (未指定的错误) | 0x80004005 |
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 |
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) #define FAILED(hr) (((HRESULT)(hr)) < 0) |
返回值:非负整数,枚举到的相机数目
参数:ToupcamInst缓冲区
说明:调用该函数枚举计算机上当前插上的Toupcam相机.函数返回时,ToupcamInst缓冲区包含有枚举到的每个相机实例的信息.如果不关心多个相机同时联入电脑的情况的话,调用本函数枚举相机实例是可选的.
如下面的代码片段:
ToupcamInst arr[TOUPCAM_MAX]; unsigned cnt = Toupcam_Enum(arr); for (unsigned i = 0; i < cnt; ++i) ......
typedef struct{ #ifdef _WIN32 const wchar_t* name; /* model name */ #else const char* name; #endif unsigned flag; /* TOUPCAM_FLAG_xxx */ unsigned maxspeed; /* maximum speed level, Toupcam_get_MaxSpeed, the speed range = [0, maxspeed], closed interval */ unsigned preview; /* number of preview resolution, Toupcam_get_ResolutionNumber */ unsigned still; /* number of still resolution, Toupcam_get_StillResolutionNumber */ ToupcamResolution res[TOUPCAM_MAX]; }ToupcamModel;
name 型号名称 flag 位标记 (Bitwise flag) TOUPCAM_FLAG_CMOS cmos传感器 TOUPCAM_FLAG_CCD_PROGRESSIVE 逐行ccd传感器 TOUPCAM_FLAG_CCD_INTERLACED 隔行ccd传感器 TOUPCAM_FLAG_ROI_HARDWARE 支持硬件ROI.所谓硬件ROI和软件ROI,前者设置sensor的工作参数,从sensor读取的数据减少(从而提高帧率);后者不改变sensor的工作参数,从sensor读取的数据量不变,上层软件把原始图像剪切到目标ROI矩形大小. TOUPCAM_FLAG_MONO 黑白传感器 TOUPCAM_FLAG_BINSKIP_SUPPORTED 支持bin/skip模式, 请参考Toupcam_put_Mode和Toupcam_get_Mode TOUPCAM_FLAG_USB30 USB 3.0 TOUPCAM_FLAG_COOLED 制冷相机 TOUPCAM_FLAG_USB30_OVER_USB20 usb3.0 相机被插入usb2.0端口 TOUPCAM_FLAG_ST4 支持ST4端口 TOUPCAM_FLAG_GETTEMPERATURE 支持读取温度, Toupcam_get_Temperature TOUPCAM_FLAG_PUTTEMPERATURE 支持设置温度, Toupcam_put_Temperature TOUPCAM_FLAG_BITDEPTH10 最大位深度(Bit Depth) = 10 bits TOUPCAM_FLAG_BITDEPTH12 最大位深度(Bit Depth) = 12 bits TOUPCAM_FLAG_BITDEPTH14 最大位深度(Bit Depth) = 14 bits TOUPCAM_FLAG_BITDEPTH16 最大位深度(Bit Depth) = 16 bits TOUPCAM_FLAG_FAN 支持制冷风扇 TOUPCAM_FLAG_COOLERONOFF 制冷装置支持开启/关闭 TOUPCAM_FLAG_ISP 支持硬件ISP(image signal processing),降低CPU进行图像处理的CPU利用率 TOUPCAM_FLAG_TRIGGER 支持触发模式 maxspeed 最大速度等级,和函数Toupcam_get_MaxSpeed返回值相同. 速度范围是[0, maxspeed]. 可以通过Toupcam_put_Speed设置速度等级, Toupcam_get_Speed获取当前速度等级 preview 预览分辨率的个数. 和函数Toupcam_get_ResolutionNumber返回值相同 still 静态抓拍分辨率个数, 0表示不支持静态抓拍. 和函数Toupcam_get_StillResolutionNumber返回值相同 res 分辨率宽度和高度
返回值:无
参数:
PTOUPCAM_HOTPLUG pHotPlugCallback: 回调函数
typedef void (*PTOUPCAM_HOTPLUG)(void* pCallbackCtx);void* pCallbackCtx: 回调函数上下文
说明:
本函数只存在于OSX和Linux平台,Windows平台不需要.
在Windows平台处理设备插入/拔出通知,请参阅MSDN(Device Management, Detecting Media Insertion or Removal).
在Linux/OSX平台,如果需要处理设备插入/拔出通知,调用本函数注册回调函数. 当设备被插入/拔出时时,程序通过回调函数得到通知,然后调用Toupcam_Enum重新枚举设备即可.
返回值:HToupCam句柄.失败时返回NULL(如设备被突然拔出等等)
参数:ToupCam相机实例,由Toupcam_Enum枚举得到.如果id是NULL则自动打开第一个相机,所以,如果不关心多个相机实例同时连入电脑的情况,Toupcam_Enum不是必须的,直接传入参数NULL打开唯一的相机实例.
说明:打开相机实例.
返回值:无
参数:HToupCam句柄
说明:关闭相机实例.句柄关闭之后,请不要再使用之.不要在PTOUPCAM_EVENT_CALLBACK和PTOUPCAM_DATA_CALLBACK回调函数里面调用Toupcam_Close,否则,会死锁.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:由Toupcam_Open打开的实例句柄
HWND hWnd: 事件发生时,消息将Post到这个窗口
UINT nMsg: Windows自定义消息类型.消息的WPARAM参数是事件类型TOUPCAM_EVENT_xxxx,LPARAM参数不用(恒等于0)
PTOUPCAM_EVENT_CALLBACK pEventCallback, void* pCallbackContext:用户程序指定的回调函数和回调上下文参数. 注意:该回调函数是从toupcam.dll的内部线程上下文中回调出来,所以,非常有必要关注多线程问题. 请尽量保持回调函数代码的简洁,并且快速返回. 不要在回调函数上下文调用Toupcam_Stop或Toupcam_Close函数,否则,会死锁.
typedef void (__stdcall* PTOUPCAM_EVENT_CALLBACK)(unsigned nEvent, void* pCallbackCtx);
说明:很明显,Toupcam_StartPullModeWithWndMsg只支持Windows系统
返回值:HRESULT类型表示成功失败,不存在图像可供获取时返回E_FAIL
参数:
HToupCam h:由Toupcam_Open打开的实例句柄
void* pImageData:数据缓冲区.用户应用程序必须确保改缓冲区足够大,以容纳图像数据
int bits:图像颜色位数,支持24, 32, 48和8,分别代表RGB24, RGB32, RGB48, 8位灰度图像. 本参数在RAW模式下没有意义,被忽略
unsigned* pnWidth, unsigned* pnHeight:图像的宽度高度
说明:当pImageData为NULL而pnWidth, pnHeight参数不为NULL的时候,可以获取(Peek)是否存在图像以及图像的宽度高度信息
请保证pImageData缓冲区的大小足够容纳整帧数据,请看下表:
格式 缓冲区大小 RGB RGB24 DIBWIDTHBYTES(24 * Width) * Height RGB32 Width * Height * 4 RGB48 DIBWIDTHBYTES(48 * Width) * Height RGB8灰度图像 DIBWIDTHBYTES(8 * Width) * Height RAW 8bits模式 Width * Height 10bits, 12bits, 14bits, 16bits模式 Width * Height * 2
#ifndef DIBWIDTHBYTES
#define DIBWIDTHBYTES(bits) ((unsigned)(((bits) + 31) & (~31)) / 8)
#endif
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:由Toupcam_Open打开的实例句柄
PTOUPCAM_DATA_CALLBACK pDataCallback, void* pCallbackCtx:用户程序指定的回调函数和回调上下文参数.toupcam.dll内部从相机得到的图像数据后,会回调该函数.
typedef void (*PTOUPCAM_DATA_CALLBACK)(const void* pData, const BITMAPINFOHEADER* pHeader, BOOL bSnap, void* pCallbackCtx);
如果回调时,pData参数==NULL,表示发生内部错误(如相机被突然拔出等等).
BOOL bSnap参数,TRUE表示是由Toupcam_Snap函数发起的图片抓拍,FALSE表示普通的预览图片(视频).
注意:该回调函数是从toupcam.dll的内部线程上下文中回调出来,所以,非常有必要关注多线程问题. 请尽量保持回调函数代码的简洁,并且快速返回. 不要在回调函数上下文调用Toupcam_Stop或Toupcam_Close函数,否则,会死锁. 正是因为使用Push模式的复杂性,所以,推荐使用Pull模式(特别是使用窗口消息通知事件).
说明:开启相机实例.
返回值:HRESULT类型表示成功失败
参数:HToupCam句柄
说明:停止相机实例.如果使用推模式(Push Mode),请不要在PTOUPCAM_EVENT_CALLBACK和PTOUPCAM_DATA_CALLBACK回调函数里面调用Toupcam_Stop,否则,会死锁. 停止之后,可以调用Toupcam_StartPushMode重新开启.比如切换视频分辨率:
步骤1:调用Toupcam_Stop停止
步骤2:调用Toupcam_put_Size或者Toupcam_put_eSize设置新分辨率
步骤3:调用Toupcam_StartPullModeWithWndMsg或Toupcam_StartPullModeWithCallback或Toupcam_StartPushMode重新开启
返回值:HRESULT类型表示成功失败
参数:HToupCam句柄
说明:暂停或者继续相机实例
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned nResolutionIndex:想要抓拍的分辨率序号.
说明:抓拍图片. 抓拍成功之后,如果是Push Mode, 则通过TOUPCAM_EVENT_STILLIMAGE通知. 如果是Push Mode则通过PTOUPCAM_DATA_CALLBACK回调函数返回,其中回调函数的参数BOOL bSnap设为TRUE.
有些相机支持在预览视频的不间断的情况下,抓拍单张的不同于正在视频预览的分辨率的所谓静态图片.例如UCMOS03100KPA,正在预览的分辨率是1024*768,调用Toupcam_Snap(h, 0)抓拍单张第0号分辨率(2048*1536)的图片.预览使用小分辨率(追求更快的帧率),抓拍使用大分辨率(追求更好的图片质量).这种行为,称之为“静态抓拍”.
对于不支持静态抓拍的相机型号,则参数nResolutionIndex的值必须等于当前正在预览的分辨率,否则,函数返回E_UNEXPECTED.
某个型号是否支持静态抓拍能力,参见ToupcamModel的still域(大于0).
返回值:HRESULT类型表示成功失败. 对于不支持触发模式的相机返回E_NOTIMPL
参数:
HToupCam h:相机实例句柄
说明:有些相机支持触发模式,参见ToupcamModel的flag之TOUPCAM_FLAG_TRIGGER. 触发模式下,调用本函数执行一次软触发. 触发成功之后,如果是Push Mode, 则通过TOUPCAM_EVENT_IMAGE通知. 如果是Push Mode则通过PTOUPCAM_DATA_CALLBACK回调函数返回,其中回调函数的参数BOOL bSnap设为FALSE.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned nResolutionIndex:当前分辨率序号
int nWidth, int nHeight:当前分辨率的宽度高度
说明:设置或者得到当前分辨率.
设置分辨率应该在Toupcam_StartPullModeWithWndMsg或Toupcam_StartPullModeWithCallback或Toupcam_StartPushMode之前进行.
有2种方法设置当前分辨率,一种是通过分辨率的序号,一种是通过宽度/高度.两种方法是等效的.比如UCMOS03100KPA支持以下3种分辨率:
序号0: 2048, 1536
序号1: 1024, 768
序号2: 680, 510
所以Toupcam_put_Size(h, 1024, 768) or Toupcam_put_eSize(h, 1)效果一样.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned nResolutionIndex:当前分辨率序号
int nWidth, int nHeight:当前分辨率的宽度高度
说明:设置或者得到当前分辨率.
设置分辨率应该在Toupcam_StartPullModeWithWndMsg或Toupcam_StartPullModeWithCallback或Toupcam_StartPushMode之前进行.
有2种方法设置当前分辨率,一种是通过分辨率的序号,一种是通过宽度/高度.两种方法是等效的.比如UCMOS03100KPA支持以下3种分辨率:
序号0: 2048, 1536
序号1: 1024, 768
序号2: 680, 510
所以Toupcam_put_Size(h, 1024, 768) or Toupcam_put_eSize(h, 1)效果一样.
返回值:HRESULT类型表示成功失败.
参数:
HToupCam h: 相机实例句柄
unsigned xOffset: x偏移,必须是偶数
unsigned yOffset: y偏移,必须是偶数
unsigned xWidth: 宽度. 最小值16,必须是偶数
unsigned yHeight: 高度. 最小值16,必须是偶数
说明: 设置/获取ROI. Toupcam_put_Roi(h, 0, 0, 0, 0)表示清除ROI恢复原始尺寸.
例外: UHCCD03100KPB, UHCCD05000KPA, UHCCD05100KPA的小分辨率不支持ROI功能, 函数返回值是E_NOTIMPL。
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned nIndex:分辨率序号
int* pWidth, int* pHeight:宽度、高度
说明:Toupcam_get_ResolutionNumber得到支持的分辨率个数(如UCMOS03100KPA返回3,表示支持3种分辨率).Toupcam_get_Resolution得到每种分辨率的高度/宽度.
这些参数在Toupcam_Enum返回相机实例的ToupcamModel都已经包含.
返回值:HRESULT类型表示成功失败.
参数:
HToupCam h:相机实例句柄
unsigned* nFourCC:格式类型,见下表
unsigned* bitdepth:Bit Depth,如8, 10, 12, 14, 16
#ifndef MAKEFOURCC
#define MAKEFOURCC(a, b, c, d) ((uint32_t)(uint8_t)(a) | ((uint32_t)(uint8_t)(b) << 8) | ((uint32_t)(uint8_t)(c) << 16) | ((uint32_t)(uint8_t)(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('Y', 'U', 'Y', 'V') YUV4:2:2, 请参阅: http://www.fourcc.org MAKEFOURCC('Y', 'Y', 'Y', 'Y') 黑白相机
返回值:HRESULT类型表示成功失败.
参数:
HToupCam h:相机实例句柄
unsigned iOption:选项,见下表
unsigned iValue:值,见下表
选项 说明 默认值 是否可以在调用Toupcam_StartPullModeWithWndMsg或Toupcam_StartPullModeWithCallback或Toupcam_StartPushMode之后设置该值 TOUPCAM_OPTION_NOFRAME_TIMEOUT 一定时间没有获取到任何一帧完整数据,就报错.
1 = 使能本特性;
0 = 禁用1 是 TOUPCAM_OPTION_THREAD_PRIORITY 设置内部线程的优先级.
0 = THREAD_PRIORITY_NORMAL;
1 = THREAD_PRIORITY_ABOVE_NORMAL;
2 = THREAD_PRIORITY_HIGHEST;
请参阅: SetThreadPriority
本选项在Linux和OSX平台下被忽略.0 是 TOUPCAM_OPTION_PROCESSMODE 0:full模式,图像质量更好,但是更耗费CPU.
1: fast模式,图像质量差些,耗费更少的CPU.
根据具体的使用情况选择FULL模式还是FAST模式.0 是 TOUPCAM_OPTION_RAW 0表示使用RGB模式.
1表示RAW模式,直接获取底层传感器数据.0 否
(在相机已经开启的情况下,设置本选项,函数返回E_UNEXPECTED)TOUPCAM_OPTION_BITDEPTH 一些型号的相机支持大于8Bits的位深度(Bit Depth),如10,12,14,16等.
0表示使用8Bits位深度.
1表示使用本相机支持的最高位深度NA 是 TOUPCAM_OPTION_FAN 一些型号的相机支持制冷风扇.
0 = 关闭风扇
1 = 打开风扇1 是 TOUPCAM_OPTION_COOLER 一些型号的相机支持开启关闭制冷装置.
0 = 关闭制冷
1 = 开启制冷1 是 TOUPCAM_OPTION_LINEAR 0 = 关闭linear tone mapping
1 = 开启linear tone mapping1 是 TOUPCAM_OPTION_CURVE 0 = 关闭curve tone mapping
1 = 开启curve tone mapping1 是 TOUPCAM_OPTION_TRIGGER 0 = 连续模式
1 = 触发(Trigger)模式0 否
(在相机已经开启的情况下,设置本选项,函数返回E_UNEXPECTED)TOUPCAM_OPTION_RGB48 在位深度>8时,启用RGB48格式 0 否
(在相机已经开启的情况下,设置本选项,函数返回E_UNEXPECTED)一般情况下,不需要设置这些选项. 如有必要,请在准确理解这些选项的具体含义时才设置它们.
UHCCD03100KPB, UHCCD05000KPA, UHCCD05100KPA的小分辨率不支持RAW模式
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
BOOL bEnable:TRUE or FALSE
说明:如果设置RealTime模式为TRUE,更短的帧延时,但是帧速率降低,流畅性受损.缺省设为FALSE,一般不需要改动.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
BOOL bAutoExposure:TRUE or FALSE
unsigned short Target:自动曝光目标
unsigned maxTime, unsigned short maxAGain:自动曝光的最大曝光时间和最大模拟增益
说明:如果启用自动曝光,软件将自动设置曝光时间和模拟增益使得目标矩形的平均亮度尽量接近曝光目标(见Toupcam_put_AEAuxRect, Toupcam_get_AEAuxRect).
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned Time:曝光时间,单位微秒
unsigned* nMin, unsigned* nMax, unsigned* nDef:曝光时间的最小值,最大值,默认值
说明:曝光时间相关.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned short AGain:模拟增益,百分比,如200表示增益200%
unsigned short* nMin, unsigned short* nMax, unsigned short* nDef:模拟增益的最小值,最大值,默认值
说明:模拟增益相关.
返回值:HRESULT类型表示成功失败
参数:HToupCam h:相机实例句柄
说明:设置或者得到:色度,饱和度,亮度,对比度,Gamma
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
BOOL bChrome:TRUE or FALSE
说明:多色模式或者单色模式.
返回值:HRESULT类型表示成功失败
参数: HToupCam h:相机实例句柄
说明:垂直或者水平翻转
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned short nSpeed:帧速率级别
说明:最小帧速率等级是0.最大帧速率级别可以通过Toupcam_get_MaxSpeed函数得到,和ToupcamModel的maxspeed是一个意思.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
int nHZ:0表示60Hz交流,1表示50Hz交流,2表示直流
说明:设置光源的电力供应频率
返回值:HRESULT类型表示成功失败, E_NOTIMPL表示不支持读取/设置温度
参数:
HToupCam h:相机实例句柄
short nTemperature:以0.1摄氏度为单位,如32表示3.2摄氏度.
说明:读取传感器温度(TOUPCAM_FLAG_GETTEMPERATURE表示支持读取温度).
设置传感器目标温度(制冷目标温度, TOUPCAM_FLAG_PUTTEMPERATURE表示支持设置温度.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
BOOL bSkip:Bin模式或者Skip模式
说明:设置Bin模式或者Skip模式.较高分辨率的相机支持2种采样模式,一种是Bin模式(邻域平均),一种是Skip模式(抽样提取).相比较而言,前者图像效果较好,但是帧速率降低;后者帧速率较高,但是图像效果较差.
返回值:HRESULT类型表示成功失败. Temp/Tint模式下起作用,RGB Gain模式下不起作用直接返回E_NOTIMPL.
参数:
HToupCam h:相机实例句柄
int nTemp, int nTint:色温和Tint
说明:Temp/Tint模式下设置/获取白平衡的色温和Tint参数.请参阅这里.
返回值:HRESULT类型表示成功失败. Temp/Tint模式下起作用,RGB Gain模式下不起作用直接返回E_NOTIMPL.
参数:
HToupCam h:相机实例句柄
PITOUPCAM_TEMPTINT_CALLBACK fnTTProc, void* pTTCtx:自动白平衡过程完成时的回调函数以及回调上下文.
说明: Temp/Tint白平衡模式下调用本函数来触发单次自动白平衡功能. 当白平衡参数计算完成的时候, TOUPCAM_EVENT_TEMPTINT事件会通知应用程序(Pull Mode)和调用回调函数. Pull mode中, 如果不使用回调函数, 请把函数指针设为NULL.
返回值:HRESULT类型表示成功失败. RGB Gain模式下起作用,Temp/Tint模式下不起作用直接返回E_NOTIMPL.
参数:
HToupCam h:相机实例句柄
int aGain[3]:RGB增益值
说明:RGB Gain模式下设置/获取白平衡的RGB增益值.请参阅这里.
返回值:HRESULT类型表示成功失败. RGB Gain模式下起作用,Temp/Tint模式下不起作用直接返回E_NOTIMPL.
参数:
HToupCam h:相机实例句柄
PITOUPCAM_WHITEBALANCE_CALLBACK fnWBProc, void* pWBCtx:自动白平衡过程完成时的回调函数以及回调上下文.
说明: RGB Gain白平衡模式下调用本函数来触发单次自动白平衡功能. 当白平衡参数计算完成的时候, TOUPCAM_EVENT_WBGAIN事件会通知应用程序(Pull Mode)和调用回调函数. Pull mode中, 如果不使用回调函数, 请把函数指针设为NULL.
返回值:HRESULT类型表示成功失败
参数:HToupCam h:相机实例句柄
说明:设置/获取自动白平衡和自动曝光的参考矩形.默认矩形位于图像正中央,宽度等于20%图像宽度,高度等于20%图像高度.
返回值:S_OK表示单色模式,S_FALSE表示彩色模式
参数:HToupCam h:相机实例句柄
说明:是否单色相机,对应ToupCamModel的flag: TOUPCAM_FLAG_MONO
返回值:相机支持的最大位深度(Bit Depth)
参数:HToupCam h:相机实例句柄
说明:有些型号的相机支持比8bits更大的位深度,如10, 12, 14, 16等.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned nIndex:分辨率序号
int* pWidth, int* pHeight:宽度、高度
说明:Toupcam_get_StillResolutionNumber得到支持的静态抓拍分辨率个数(如UCMOS03100KPA返回3,表示支持3种分辨率),如果不支持静态抓拍能力,返回0.Toupcam_get_StillResolution得到每种分辨率的高度/宽度.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
char sn[32]:存放序列号的缓冲区. 如:TP110826145730ABCD1234FEDC56787
char fwver[16]: 存放固件版本号的缓冲区. 如: 3.2.1.20140922
char hwver[16]: 存放硬件版本好的缓冲区. 如: 3.2.1.20140922
char pdate[10]: 存放生产日期的缓冲区. 如: 20150327
说明:每个相机都有一个唯一的31位的序列号.如:“TP110826145730ABCD1234FEDC56787”
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned short iLed:LED灯的序号
unsigned short iState:LED状态,1代表常亮,2代表闪烁,其它代表熄灭
unsigned short iPeriod:闪烁周期,毫秒数. 至少需要500ms.
说明:有些相机上安装有1到n个LED灯,本函数控制这些灯的状态.
返回值:HRESULT类型表示失败或读写的字节数
参数:
HToupCam h:相机实例句柄
unsigned addr: EEPROM读写地址
const unsigned char* pData: 需要写入EEPROM的数据
unsigned char* pBuffer: 读取EEPROM的缓冲区
unsigned nDataLen: 需要写入EEPROM的数据长度
unsigned nBufferLen: 读取缓冲区长度
说明:有些相机上安装有EEPROM可供读写.读写失败时返回HRESULT错误码(负数),成功时返回读取或者写入的字节数.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
PITOUPCAM_EXPOSURE_CALLBACK fnExpoProc, void* pExpoCtx:曝光回调函数以及回调上下文.设置fnExpoProc为NULL,表示停止回调.
说明:一旦设置了非NULL的回调函数,每当曝光时间变化时,回调发生.设置fnExpoProc为NULL,表示不再回调.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
PITOUPCAM_CHROME_CALLBACK fnChromeProc, void* pChromeCtx:多色/单色切换回调函数以及回调上下文.设置fnChromeProc为NULL,表示不再回调.
说明:一旦设置了非NULL的回调函数,每当单色/多色切换时(如调用Toupcam_put_Chrome),回调发生.
返回值:HRESULT类型表示成功失败
参数:HToupCam h:相机实例句柄
说明:自动LevelRange
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
unsigned short aLow[4], unsigned short aHigh[4]: R, G, B和灰度的Level Range. RGB只对彩色图像有效, 灰度只对灰度图像有效.
说明:LevelRange相关.
返回值:HRESULT类型表示成功失败
参数:
HToupCam h:相机实例句柄
PITOUPCAM_HISTOGRAM_CALLBACK fnHistogramProc, void* pHistogramCtx:直方图数据的回调函数以及回调上下文
说明:获取直方图数据
Toupcam支持.NET开发环境(C#和VB.NET).
inc目录下toupcam.cs使用P/Invoke调用至toupcam.dll. 把toupcam.cs 拷贝到你的C#工程中使用,请参考例子代码samples\toupcamdemowinformcs1和toupcamdemowinformcs2.
ToupTek.ToupCam C#包装类的属性和方法等等,直接调用toupcam.dll中对应的原生C/C++ Toupcam_xxx函数. 所以,关于Toupcam_xxx的文档说明都适用于C#中对应的属性或方法,比如,C#中的Snap方法调用Toupcam_Snap函数,关于Toupcam_Snap函数的说明同样适用于C# ToupCam类的Snap方法:
[DllImport("toupcam.dll", ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] private static extern int Toupcam_Snap(SafeHToupCamHandle h, uint nResolutionIndex); public bool Snap(uint nResolutionIndex) { if (_handle == null || _handle.IsInvalid || _handle.IsClosed) return false; return (Toupcam_Snap(_handle, nResolutionIndex) >= 0); } |
VB.NET和C#是类似的,不另说明.
Windows: BGR
OSX, Linux: RGB
参数 范围 默认值 获取 设置 自动 AutoExpoTarget
(自动曝光目标亮度)16~235 120 Toupcam_get_AutoExpoTarget Toupcam_put_AutoExpoTarget 白平衡 Temp/Tint模式 Temp(色温) 2000~15000 6503 Toupcam_get_TempTint Toupcam_put_TempTint Toupcam_AwbOnePush Tint 200~2500 1000 RGB Gain模式 Red Gain -128~128 0 Toupcam_get_WhiteBalanceGain Toupcam_put_WhiteBalanceGain Toupcam_AwbInit Green Gain Blue Gain LevelRange 0~255 Low = 0
High = 255Toupcam_get_LevelRange Toupcam_put_LevelRange Toupcam_LevelRangeAuto Contrast(对比度) -100~100 0 Toupcam_get_Contrast Toupcam_put_Contrast Hue(色度) -180~180 0 Toupcam_get_Hue Toupcam_put_Hue Saturation(饱和度) 0~255 128 Toupcam_get_Saturation; Toupcam_put_Saturation Brightness(亮度) -64~64 0 Toupcam_get_Brightness Toupcam_put_Brightness Gamma 20~180 100 Toupcam_get_Gamma Toupcam_put_Gamma
v1.6: 位深度>8时支持RGB48格式输出, 请参阅这里
v1.5: 支持触发(Trigger)模式
v1.4: 白平衡的两种模式: Temp/Tint模式 vs RGB Gain模式, 请参阅这里
v1.3: 支持ROI (Region Of Interest), 请参阅这里
v1.2: 支持更多的位深度(bit depth): 10bits, 12bits, 14bits, 16bits
v1.1: 支持RAW模式,请参阅这里和请参阅这里;增加对Linux和OSX的支持
v1.0: 初始发布
如果在使用ToupCam SDK的过程中,碰到任何问题,请与我们联系
网站:www.touptek.com www.toupcam.com
QQ:862347751
EMAIL:support@touptek.com