如何Twain编程(VC++) 实现数字摄像头的实时显示(camera preview)
现在只能实现单帧采图的功能,代码简单如下所示:1、获取DSM_Entry函数指针
m_hDSMDLL = LoadLibrary("TWAIN_32.DLL");
m_lpDSMEntry = (DSMENTRYPROC)GetProcAddress(m_hDSMDLL, MAKEINTRESOURCE(1));
2、打开数据源管理器SourceManager
rc = (*m_lpDSMEntry)(&m_AppId, NULL, DG_CONTROL, DAT_PARENT,
MSG_OPENDSM, (TW_MEMREF)&m_hWnd/*指定数据源Source的父窗口的句柄*/);
3、选择数据源Source
rc = (*m_lpDSMEntry)(&m_AppId, NULL, DG_CONTROL, DAT_IDENTITY,
MSG_USERSELECT, (TW_MEMREF)&m_SourceId);
4、打开数据源Source
rc = (*m_lpDSMEntry)(&m_AppId, NULL, DG_CONTROL, DAT_IDENTITY,
MSG_OPENDS, (TW_MEMREF)&m_SourceId);
5、启动数据源Source
TW_USERINTERFACE twUserInterface;
twUserInterface.ShowUI = FALSE; // 不显示用户界面
twUserInterface.ModalUI = TRUE;
twUserInterface.hParent = (TW_HANDLE)m_hWnd;
rc = (*m_lpDSMEntry)(&m_AppId, &m_SourceId, DG_CONTROL, DAT_USERINTERFACE,
MSG_ENABLEDS, (TW_MEMREF)&twUserInterface);
6、传输图像数据
HANDLE hBitmap = NULL;
rc = (*m_lpDSMEntry)(&m_AppId, &m_SourceId, DG_IMAGE, DAT_IMAGENATIVEXFER,
MSG_GET, (TW_MEMREF)&hBitmap); // 利用Native模式传输图像
7、告知数据源Source已经成功接收图像
TW_PENDINGXFERS twPendingXfer;
rc = (*m_lpDSMEntry)(&m_AppId, &m_SourceId, DG_CONTROL,
DAT_PENDINGXFERS, MSG_ENDXFER, &twPendingXfer);
8、Disable Source
rc = (*m_lpDSMEntry)(&m_AppId, &m_SourceId, DG_CONTROL,
DAT_USERINTERFACE, MSG_DISABLEDS, (TW_MEMREF)&twUserInterface);
为了实时显示,我现在暂时用了不是办法的办法:就是在不断的循环5~8的流程,但是实时性是很差的。
不知道真正的Twain实时显示应该怎么写?? Twain 数字摄像头 实时显示 camera preview VC++ --------------------编程问答-------------------- http://www.codeproject.com/Articles/15537/Camera-Vision-video-surveillance-on-C --------------------编程问答-------------------- 别用dat_imagenativexfer,建议用dat_imagememxfer。
这样很适合你的应用场景。编写流程跟你现在实现差不多。
去搜索引擎 去找找,应该有写好的代码 。 --------------------编程问答--------------------
为什么用DAT_IMAGEMEMXFER? 我网上搜了好久,实时显示的源码和资料找不到,都是一些单帧采集的例程,我也自己试了很多写法,不知道你有什么线索吗? --------------------编程问答--------------------
可以简单解说一下吗?我看了一下里面的代码,好像不是Twain的东西.
补充:.NET技术 , 组件/控件开发