2008-10-06
TWAIN学习笔记(壹)
?
TWAIN,定义了一套标准的软件协议(software protocol)和应用程序编程接口 (application programming interface(API))。使用它实现软件应用程序和图象获取设备(扫描仪)之间的通讯。我们见到的情况是:从FILE菜单下选取ACQUIRE就弹出了扫描软件。
四层:
Application,Protocol,Acquisition,Device
用户层,用户的应用程序,界面之类的东西
? 协议层,把用户的请求转换成TWAIN明白的内容 ? 请求层,向下请求内容,可以是硬件也可以是数据库 ? 硬件层,数据的来源
?
TWAIN之间通讯通过两个入口,DSM_Entry,DS_Entry
Application:
所有的应用不能直连到数据层,只能通过SourceManager,通过DSM_Entry()方法。
DSM_Entry()方法有下面的参数:
标识符构造,identifier structure ? 目标(SourceManager或者Source) ? 三个描述
o 数据组(Data Group : DG_) o Data Argument Type(DAT_) o Message(MSG_)
? 用于传数据的指针域
?
Win下,C代码类似于: C代码
1. TW_UINT16 FAR PASCAL DSM_Entry(
2. pTW_IDENTITY pOrigin, // source of message
3. pTW_IDENTITY pDest, // destination of message 4. TW_UINT32 DG, // data group ID: DG_xxxx
5. TW_UINT16 DAT, // data argument type: DAT_xxxx
6. TW_UINT16 MSG, // message ID: MSG_xxxx 7. TW_MEMREF pData // pointer to data 8. );
Source Manager:
SM提供应用层和数据层之间的通讯,支持用户选取数据源,应用层读取数据源。如果用DSM_Entry()的时候,调用的是SM,那直接就操作它本身。如果调用的是S,那再调用DS_Entry()。 Win下面,C代码类似于: C代码
1. TW_UINT16 FAR PASCAL DS_Entry(
2. pTW_IDENTITY pOrigin, // source of message
3. TW_UINT32 DG, // data group ID: DG_xxxx 4. TW_UINT16 DAT, // data argument type: DAT_xxxx
5. TW_UINT16 MSG, // message ID: MSG_xxxx 6. TW_MEMREF pData // pointer to data 7. ) Source:
返回值前缀TWRC_,如果出问题,设置一个前缀为TWCC_的状态码,但是不会自动返回。
SM和S在Win下都是DLL形式实现。
从Source返回给Application,需要4步:
通知应用层,已经准备好了有东西要返回了。MSG_XFERREADY用于Source通知App
? 禁用Source的用户接口,MSG_CLOSEDSREQ
? 通知应用层,按下了OK按钮,应用更改,用于Source被DG_CONTROL /DAT_USERINTERFACE / MSG_ENABLEDSUIONLY.打开的情况,MSG_CLOSEDSOK ? 设备发生动作,只有在应用层给数据层这个优先权,单独传回来。MSG_DEVICEEVENT
?
DSM_Entry()和DS_Entry()用于通讯,一个操作和一个应用或者SM关联。通常,但不绝对,用传进来的最后一个参数(pData)来描述。
从app到SM,设为NULL,从app到S(通过SM),设为目标id,从SM到S,设为DS_Entry。
传进来的三个参数DG,DAT,MSG表示的意思如下: DG_XXXX:
DG_CONTROL 用于TWAIN操作动作,例如打开SM ? DG_IMAGE 用于操作图形图像操作 ? DG_AUDIO 用于操作声频数据
?
DAT_XXX:
传进来的参数,可以引用一个结构体或者变量,例如DAT_IDENTITY,还有类似于TW_XXX的声明。 MSG_XXX:
用于确定动作,都是类似于MSG_GET,MSG_SET的有前缀MSG_开始的。 三个例子:
打开SM模块:DG_CONTROL/DAT_PARENT/MSG_OPENDSM 打开对话框,让用户可以选择Source:
DG_CONTROL/DAT_IDENTITY/MSG_USERSELECT
导一个图像到文件上:DG_IMAGE/DAT_IMAGEFILEXFER/MSG_GET
协议层被分为7个阶段:
[1,2,3]在且只在SM阶段,[4,5,6,7]在且只在S阶段。 举例说:
1.Pre-Session ----> 2.SM Loaded ----> 3.SM Opened ----> 4.Source Open ---->
SM not loaded App:Get Entry point User:Select Source Capability Negotiation
5.Source Enable ----> 6.Transfer Ready ----> 7.Transferring
Source:Show User App:Inquire Image Source: Transfer Data
Interface or Audio Information
看英文资料精疲力竭??还阳中??
TWAIN学习笔记(贰)
TWAIN
能力分成三组:
?
CAP_XXX:适用于一般的数据源 ? ICAP_XXX:适用于图形图像源 ? ACAP_XXX:适用于声音数据源
能力容器分成四类:
?
TW_ONEVALUE:单值 ? TW_ARRAY:多值 ? TW_RANGE:范围值
? TW_ENUMERATION:枚举值
<上面数据类型很烦,自己看说明去吧>
有三种方法将Source传递到应用程序。native, disk file, buffered memory。音频文件只支持native和disk file。
Native:所有的Source都必须支持的模式,但是有限制性(例如限制于DIB或者PICT格式,受可用内存的限制),Win下,DIB格式(Device-Independent Bitmap),Source给文件分配一个内存块,将指针返回给应用,应用负责转换数据之后释放这块内存。
Disk File:推荐Source支持这种模式,应用程序创建一个Source支持格式的文件,易于读写,尤其是可以避免遇到内存问题。稍微比之后讨论的Buffered模式慢,但比他好操作,并且之后应用程序要操作清理这个文件。
Buffered Memory:所有的Source必须支持该模式。
MD,被关闭了,没保存。
通过一个或多个缓存来实现传输,应用层来分配内存的使用和释放。数据以一无格式位图(unformatted bitmap)传输,应用需要在传输过程中
(TW_IMAGEINFO&TW_IMAGEMEMXFER)用信息标识各个缓存和正确识别位图。于Native和Disk File的一个动作结束传输相比,这种模式可能要多次循环。
应用层实现: TWAIN的实现层次:
最小实现:使用TWAIN默认的,只在Native本机模式,请求单独一个图片。
? 基本实现: ? 最大实现:
?
安装SM(Source Manager)软件:
TWAIN Working Group(TWG)给Win提供四个包:
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新IT计算机TWAIN学习笔记 全文阅读和word下载服务。
相关推荐: