分享
 
 
 

★ 如何利用TWAIN实现对光栅图像输入设备(扫描仪、数码相机...)的程序设计(1) ---孙涛---

王朝vc·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

现在使用扫描仪、数码照相机、以及其他图像获得设备的应用越来越多了,用户越来越希望把这些获得的图像加入到自己的文件或其他工作中。然而,要显示并操作这些图像的光栅数据需要应用程序开发人员进行较大的工作。

一种比较简单的实现是通过是KODAK提供的控件,但是这种方法局限性太多,很多设备的功能都不能使用,比如设置设备扫描的分辨率,设置数据传输方式等等...(以扫描仪器为例子)。我将介绍利用TWAIN来实现对光栅图像输入设备(扫描仪、数码相机...)的控制,

谈谈TWAIN

TWAIN是什么?TWAIN Working Group 是一个致力于光栅图像输入设备通讯的非盈利的组织。Twain就是它们提供的开发包,并且大多数的设备厂家都遵循该接口。Microsoft也把该开发接口作为系统文件发布在了windows中(9x/nt/2000/xp)。

TWAIN 结构

它们由的三个软件组件构成( application, Source Manager, 和 Source.)

你的程序可以通过这些组件实现与设备的通讯。

TWAIN结构由下面四个层次组成:

ü Application

ü Protocol

ü Acquisition

ü Device

Application

这一层是用户可执行应用程序软件所在的地方。

TWAIN 提供了一个用户接口规则,可以让应用程序开发人员访问TWAIN函数以及让用户选择一个指定的数据Source.TWAIN不参与应用程序的实现工作。TWAIN不对该层由可能用到的应用程序间的通讯产生影响。

Protocol这个协议就是使用TWAIN对话的语法。它通过准确的指令实现数据传输的通讯工作。

这个协议层包括:

ü TWAIN 和用户应用程序接口

ü TWAIN提供的Source Manager

ü Source device 与 SourceManager 间的数据传输以及返回代码

该层更详细的说明将在后面的介绍。

Acquisition

Acquisition设备可能是物理设备(扫描仪、数码相机)或者逻辑设备(图像数据库)。Source为应用

程序传输数据。它使用这个格式在Source和Application间实现传输机制。

Source通常提供一个内建的用户接口去控制Source代表的设备。

Device

这层就不介绍了。

注意: 在appcation 和 Sources 间的通讯中,Protocol 层是最重要的。

TWAIN组件间通讯

TWAIN组件间通讯有两个函数指针入口,分别是DSM_Entry( ) 和 DS_Entry( ). DSM 表示 Data Source Manager , DS 表示 Data Source.

The Application

Application的目的是为了从Source获得图像数据,然而,applications不能直接和Source对话。对Source所有操作(获得数据、性能信息、错误信息等…)必须通过Source Manager传递来实现。

在TWAIN中定义了大约140个操作消息。Application把这些消息发给Source Manager,以实现对选定的Source进行操作。

Application于Source Manager 通讯通过DSM_Entry( )函数实现。

DSM_Entry 函数参数列表内容:

l An identifier structure providing information about the application that originated the

function call

l 作用对象是 (Source Manager 或 Source)

l triplet操作描述。triplet 操作说明:

ü Data Group for the Operation (DG_ )

ü Data Argument Type for the Operation (DAT_ )

ü Message for the Operation (MSG_ )

l 指向传输数据的指针

这个函数会返回一个值来表示操作是否成功。

在C中,函数调用如下:

On Windows

TW_UINT16 FAR PASCAL DSM_Entry

( pTW_IDENTITY pOrigin, // 关于source 的信息;

pTW_IDENTITY pDest, // 消息目标

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 // 数据指针

);

Note: 数据类型定义在TWAIN.H 文件中。以后对其详细介绍。

The Source Manager

Source Manager 为application 和 Source间的通讯提供了桥梁。用户可以选择一个Source,并且Source Manager可以加载用户选中的这个Source,让Application去访问这个Source。

ü 如果DSM_Entry 函数目标是 Source Manager - Source Manager就自己处理这个操作。

ü 如果DSM_Entry 函数目标是 Source - Source Manager 就把操作信息的写入到参数列表中,并且在 destination 参数中写入指定的Source。为了把信息传递到Source, Source Manager将调用Source的DS_Entry( ) 函数。TWAIN规定,每个Source都要有DS_Entry 这个函数接口。

在C中,函数调用如下:

On WindowsTW_UINT16 FAR PASCAL DS_Entry

(pTW_IDENTITY pOrigin, // 关于source 的信息;

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 // 数据指针

);

另外,Source Manager可以不需要Application发起,就开始三个操作。这些操作仅仅存在Source Manager与 Source通讯的时候,并且要在SourceManager显示选择Source对话窗体时才能执行。这些操作用于:查找操作系统中可用的Source、打开Source、关闭Source.

On Windows

在Windows操作系统中, Source Manager 是一个动态连接库 (DLL).

Source Manager 可以同时管理多个Applications和多个Sources的会话. Source Manager的线程被多个应用程序共享。

The Source

Source不直接接受Application的操作,而是通过Source Manager中转。Source也可能直接接受Source Manager操作。Source接受这些操作后,通过返回代码(返回代码以TWRC_为前缀)传递给Source Manager来表示处理的操作结果。

如果操作的发起方是Application, 这个返回代码通过DSM_Entry( )函数的返回值,被传回给Application。

如果,操作没有成功,Source会把一些失败信息写入到一个标记代码中(以TWCC_为前缀),但是,Source不会自动把这个代码传递给Application。如果Appliaction要想得到这个信息必须要发出个操作请求,才能得到这些信息。

On Windows在Windows操作系统中, Source是一个动态连接库 (DLL).

后面我将陆续介绍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有