Twain 协议扫描仪控制接口基于.Net 框架的实现
摘要:TWAIN 协议是被广泛支持和使用的应用程序与数字图像设备之间的通信标准,该协议封装在 twain_32.dll 中,在.
Net 框架下不方便直接使用,文章设计实现了基于.Net 的 TWAIN 协议接口,该接口能够充分利用.Net 框架的应用程序设计中的优势,同时完全满足图像扫描的实际要求。
关键词:TWAIN 协议;图像扫描
中图分类号:TP311.52 文献标识码:A 文章编号:1673-1131(2015)10-0101-02.
0 引言
TWAIN 全称 Toolkit Without An Interesting Name,是提供给用户的控制硬件扫描仪的接口,更是一种规范应用软件与数字图像设备(如扫描仪,数码相机等)之间通信的标准[1]。
TWAIN 是一项被广泛关注的工业标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的规范,以有效地避免系统及设备之间不兼容的问题。TWAIN 协议为操作系统提供了软件支持,使得符合TWAIN协议的软件通过调用TWAIN协议接口就能从兼容TWAIN协议的外设上获取静态图像,而不必考虑外设的功能差别。TWAIN 协议支持多种操作系统,Windows 操作系统默认支持 TWAIN 协议。遗憾的是该协议一般应用在VC++环境下,为了利用.Net框架在应用程序领域的优点,本文实现了基于. Net 的 TWAIN 协议接口,当便在应用软件中进行集成。
1 TWAIN 体系结构
完整的图像数据传输包含三个组成部分[2],采用TWAIN协议进行通信,而TWAIN体系结构将三个组成部分分为了四个层次,如图 1 所示。
应用软件:指借助TWAIN协议控制图像设备的一切应用软件。
数据源管理器:Data Source Manager (DSM),管理应用软件与数据源直接的相互通信。
数据源:Data Source (DS),负责控制硬件设备进行图像的采集。
应用程序层:应用程序中用户逻辑运行在该层。 协议层:协议层描述 TWAIN 的语法,实现数据传输需要的指令和通信方式。
图 1 TWAIN 软件体系结构
数据获取层:也称为 DS,负责图像获取控制,数据传输,决定数据传输格式和传输机制。
设备驱动层:传统的设备驱动层,直接控制图像设备。
TWAIN 协议通过 DSM_Entry( )和 DS_Entry( )两个接口分别 DSM_Entry ( )完成应用程序与 DSM 之间的通信、DSM与 DS 之间的通信。
1.1 TWAIN 协议时序
基于 TWAIN 协议的图像获取系统工作必须遵循特定的时序,如图 2 所示。 TWAIN 协议将获取图像数据操作分成 7个阶段[3、4]。应用程序或 DS 负责驱动状态的转移,大部分状态转移遵循单状态转移。
下面简单介绍一下七个状态。
状态 1:会话准备阶段,尚没有建立会话,未加载资源。 状态 2:DSM 加载阶段,DSM 已被加载到了内存。
状态 3:DSM打开阶段,DSM已经被打开。在该阶段DSM可以提供系统支持的 DS 列表。
状态 4:DS 打开阶段,该阶段 DS 被加载,并打开,应用程序可以获取 DS 的特性,并对 DS 进行参数设定。
状态 5:DS 激活阶段,DS 已经准备好获取图像数据。
状态 6:数据传输准备阶段,在数据传输之前,应用程序请求图像信息,通知 DS 已经做好了接收数据的准备。
状态 7:数据传输阶段,DS 将图像数据传输给应用程序。
应用程序向 DS 发送确认信息,结束数据的传输。
在 TWAIN 协议中应用程序不允许直接与 DS 通信,所有请求必须经过DSM转发,DSM_Entry()是应用程序与DSM之间唯一的接口。
1.2 TWAIN 协议.Net 框架下实现
Windows 中 TWAIN 协议的接口封装在 twain_32.dll 下。
而.NET Freamework 框架没有内置对应的 TWAIN 库,本文采用在.Net框架下对twain_32.dll封装方法重新映射的方法实现了.Net 框架下的 TWAIN 方法库。
1.2.1 协议接口介绍
DSM_Entry()函数结构如下:
TW_UINT16 FAR PASCAL DSM_Entry(
pTW_IDENTITY pOrigin,//操作发起者的标识结构体pTW_IDENTITY pDest,//请求的目标对象(DSM 或者DSM)TW_UINT32 DG,//Dat Group 组,分 CONTROL、IMAGE、AUDIO 三个组。
TW_UINT16 DAT,// Data Argument Type 数据类型TW_UINIT16 MSG,// Message 消息标识TW_MEMREF pData//指向数据传输的数据域。
) 注
释中介绍了每个参数的含义,DSM_Entry()函数返回一个数值标识(Return Code)标识操作的成功或失败。
TWAIN 协议中定义了 140 种操作,协议通过 DG、DAT、MSG 三个参数唯一的确定操作,因此也称为 Triplets 操作,应用程序通过正确的设置 DSM_Entry()函数的三个参数实现与DSM 的通信。表 1 中列举了常用的 Triplets 操作并进行了功能说明以及状态转换。
表 1 常用 Triplets 操作举例说明
1.2.2 接口映射封装
TWAIN 协议的操作具体实现并封装到了 twain_32.dll 中,在基于.Net 的应用程序中无法直接进行加载调用。应用程序仅通过 DSM_Entry () 接口控制 DS,本文借助. Net 框架中的DLLImport从非托管的twain_32.dll中导出DSM_Entry()接口信息,具体如下:
[DllImport("twain_32.dll", EntryPoint = "DSM_Entry", CharSet = CharSet.Ansi)]
private static extern UInt16 WindowsTwain32DsmEntryParent (ref TW_IDENTITY_LEGACY origin, IntPtr dest, DG dg,DAT dat, MSG msg, ref IntPtr hwnd );DSM_Entry () 接口中最后一个参数是可变类型的指针变量,.Net框架中可以为不同的传输数据的类型定义不同的传输函数。本文在此基础上将常用的 Triplets 操作映射成不同的接口函数,同时按常用组合进行二次封装,形成了专门的工具类库,表 2 列出了二次封装的主要方法列表。
表 2 二次封装主要方法列表
2 实际应用
本文在实现的 TWAIN 协议接口基础上设计实现了一款电子档案管理程序中的扫描档案管理模块,事实证明本文设计的协议接口,能够满足一般图像扫描应用,使用方便。
3 结语
目前扫描仪等图像处理设备基本提供了TWAIN驱动程序,利用统一的 TWAIN 接口,应用程序可以非常方便地从这些设备中获取图像。本文详细介绍了 TWAIN 协议的使用方法,设计实现了基于.Net的调用接口,实际应用表明,通过本文实现的接口可以方便了在.Net 框架下调用图像设备,获取图像信息。
参考文献:
[1] TWAIN - Wikipedia, the free encyclopedia.pdf.
[2] 王文姣, 田学东.基于 TWAIN 协议扫描仪接口参数的自动调整[J].计算机工程与设计,2008(11).
[3] 向冬梅, 肖佩.基于 TWAIN 标准的扫描仪接口软件的应用[J].武汉理工大学学报(信息与管理工程版),2003(12).
[4] 范建军.TWAIN协议剖析[D].郧阳师范高等专科学校,2004