分享

浅谈 TWAIN 标准

 ctbtcol 2015-01-05

浅谈 TWAIN 标准

文 倪志权

如果你是一个扫描仪用户,你可能会为说明书中出现的“TWAIN标准”字样而困惑,什么是TWAIN呢?本文希望通过对TWAIN标准的一些介绍,起到抛砖引玉的作用,对大家使用扫描仪有所帮助。

 

一、什么是TWAIN

TWAIN组织成立于1990年,是由Aldus、Caere、Kodak、HP、Logitech、Adobe、Howtek和Software Architechs八家国际知名公司发起成立的。TWAIN是专门研究并实施图像扫描仪软件接口的组织,由它推出的扫描仪接口标准,就称为TWAIN标准。现在市场上绝大部分出售的扫描仪都符合TWAIN标准,目前的TWAIN标准版本号为1.8,其PDF格式文本可从TWAIN网站下载。

 

二、为什么要使用TWAIN标准

TWAIN标准的产生和发展是实际应用的需要,它为扫描设备和应用程序之间提供了一个标准化的接口。通过该接口,扫描仪能很方便地被更多的程序所使用,而程序编制人员在编程过程中也无须考虑具体的扫描仪型号。 采用TWAIN标准,对编程人员来说,可以编制出直接使用扫描仪的软件。使用户在使用软件时,无须离开界面去使用特定的扫描软件;也无须为软件指定特定的扫描仪型号或为不同的扫描仪编制不同的程序;编程人员还可在程序中直接设定扫描仪的相关参数。

采用TWAIN标准,对设备制造商来说,能大大增加与产品配套的软件数量,为产品的升级提供方便。而对扫描仪用户来说,这就使复杂的操作得到了简化。因此用户也不必为了要扫描图形,而离开正在使用的软件。

 

三、TWAIN的基本原理

为实现应用软件和图像获得设备(即扫描仪等)之间的通讯,TWAIN定义了一套标准软件协议和程序接口(API),主要包括三个部分:即应用软件(The application software)、源管理软件(The Source Manager software)和源软件(The Source software)。应用软件中必须含有使用TWAIN的程序段;源软件直接控制图像获得设备,它一般是由设备制造商提供的,现在市场上出售的符合TWAIN标准的设备基本都配有该类软件;源管理软件起到管理应用软件,并与源软件间联系的作用,它由TWAIN发展工具(TWAIN Developer Toolkit)提供,用户可由TWAIN的主页下载。它们之间的相互联系见图1。

从用户界面上简单直观地说,应用软件必须含有两个菜单项,即“选择设备”项(Select Source)和“获得扫描”(Acquire)项;源管理软件则提供了当用户选择“选择设备”菜单时,出现的“选择设备(Select Source)”对话框等;源软件提供了我们使用扫描仪时所见到的扫描仪用户界面。

三部分之间的通讯是通过两个入口函数:DSM_Entry()和DS_Entry()来实现的,见图2。应用(Application)的最终目标是从源(Source)获得数据,但应用不能直接与源联系,所有的数据获得、属性信息、错误信息等都必须通过源管理器(Source Manager)来传递。TWAIN定义了大约140种操作,应用程序必须通过DSM_Entry()函数将这些操作请求传递给源管理器,源管理器收到这些请求后,如发现这些操作的目标是源,则调用DS_Entry()函数将请求发给源。

 

DSM_Entry()的函数原型如下:

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_xxx

TW_UINT16 DAT,//Data argument type:DAT_xxx

TW_UINT16 MSG,//message ID:MSG_xxx

TW_MEMREF pData,//Pointer to data);

 

注:其类型说明在TWAIN.H文件中

其中data group ID(DG_xxx)、Data argument type(DAT_xxx)、Message ID(MSG_xxx)的不同组合唯一标志出DSM_Entry()的一种操作。举例如下:打开源管理器的操作组合是:DG_CONTROL/DAT_PARENT/MSG_OPENDSM;从源获得数据到一个文件的操作组合是:DG_IMAGE/DAT_IMAGEFILEXFER/MSG_GET等,所有的操作组合说明都可以从TWAIN标准中找到。

应用程序通过源管理器从源获得数据时,有一定的先后顺序。为了确保这一顺序的正常执行,TWAIN定义了7种状态(state),这7种状态的先后和相互间的转换见图3。需要注意的是,状态1、2和3只能由源管理器所占有,源管理器永远不会出现在一个大于3的状态中;状态4、5、6和7只能由源占用,一个源如果是打开的,则不会有小于4的状态,如果是关闭的则无状态。编写能驱动扫描仪的程序,实质就是编写能完成这7种状态间相互转换的使用DSM_Entry()函数的调用代码段。

以上简单地介绍了TWAIN的基本原理,如真正进行编程,还必须认真阅读TWAIN 1.8标准的文本,该文本有详细的说明和示例。希望本文能对你阅读该文本有所帮助。关于TWAIN的最新发展和详细情况可以访问该组织的网站

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多