分类:
2008-10-29 10:03:36
WAIN 数据源管理程序 (DSM) 工业标准的库,用于从静态图像设备提取图像。绝大部分的扫描仪和数码相机都提供了 TWAIN 程序,利用统一的 TWAIN 接口,应用程序可以非常方便地从这些设备中获取图像。
Windows 系统中存在一个 TWAIN_32.dll,所有的 TWAIN 操作都是通过这个 DLL 导出的 DSM_Entry 函数来实现的 (说实在话,我个人觉得 TWAIN 接口设计得太差了,看看 MS 的WIA,逻辑上非常清晰)。这个函数的声明如下:
TW_UINT16 FAR PASCAL DSM_Entry(
pTW_IDENTITY pOrigin, // Source of message
pTW_IDENTITY pDest, // Destination of message
TW_UINT32 DG, // Data group ID: DG_xxxx
TW_UINT16 DAT, // Data argument type: DAT_xxxx
TW_UINT16 MSG, // Message ID: MSG_xxxx
TW_MEMREF pData // Pointer to data
);
1. 打开 DSM (Data Source Manager: 数据源管理器)
TWAIN 是一个数据源管理程序,应用程序首先要使用 MSG_OPENDSM 消息,打开数据源管理器。这里需要指定一个窗口句柄,应用程序应该在此窗口的消息循环中处理 TWAIN 消息 (MSG_PROCESSEVENT)。
2. 选择 DS (Data Source: 数据源)
因为一个系统中可能存在多个 TWAIN 设备,因此必须选择一个数据源。选择数据源通常有两种方式: 选择默认数据源 (MSG_GETDEFAULT) 和显示选择数据源对话框,由用户来选择数据源 (MSG_USERSELECT)。
3. 打开 DS
使用 MSG_OPENDS 消息打开数据源。
4. 设置参数
消息为 MSG_SET,设置各种参数,如获取方式、图像数量等。有些参数由设备支持才有效。
5. 显示扫描界面
使用 MSG_ENABLEDS 消息,显示设备提供的用户界面 (UI)。
6. 获取图像
如果用户选择扫描什么的,可以在窗口的消息循环中获取到这个事件 (MSG_XFERREADY)。此时,应用程序可以通过 DAT_SETUPFILEXFER 设置文件名,然后用 DAT_IMAGEFILEXFER 获取图像到文件中。
7. 关闭扫描界面
在窗口的消息循环中获取到 MSG_CLOSEDSREQ 或 MSG_CLOSEDSOK 消息,可以关闭扫描界面 (MSG_DISABLEDS)。
8. 关闭 DS
消息为 MSG_CLOSEDS。
9. 关闭数据源
消息为 MSG_CLOSEDSM。
本程序来源于codeproject一个经典的c#调用twain的例子,别人已经有写好的类(老外就是慷慨),稍加改动,将扫描得到的结果先保存为一个文件,然后在picturebox中显示出来。
原文及代码可参考以上连接。