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

原创 2005年05月25日 17:24:00

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

   一种比较简单的实现是通过是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为应用

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

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进行操作。

 ApplicationSource 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将调用SourceDS_Entry( ) 函数。TWAIN规定,每个Source都要有DS_Entry 这个函数接口。

 

C中,函数调用如下:

 

On Windows

TW_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).

 

后面我将陆续介绍。

  The Application

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

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

 ApplicationSource 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将调用SourceDS_Entry( ) 函数。TWAIN规定,每个Source都要有DS_Entry 这个函数接口。

 

C中,函数调用如下:

 

On Windows

TW_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).

 

后面我将陆续介绍。

注意: 在appcation Sources 间的通讯中,Protocol 层是最重要的。这层就不介绍了。

利用TWAIN-实现与图像输入设备的通讯

http://blog.csdn.net/hejianhua/article/details/2383223 利用TWAIN-实现与图像输入设备的通讯 TWAIN工作组是一个非盈利的国际组织。它旨...
  • bai_lu_sz
  • bai_lu_sz
  • 2013年03月13日 17:32
  • 1082

[最后版本]利用TWAIN-实现与图像输入设备的通讯--孙涛--

  • suntaoznz
  • suntaoznz
  • 2005年12月07日 12:01
  • 6856

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

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

VC中基于TWAIN协议控制扫描仪-----初级版

PS:本人是C++小白一枚,在研究此功能时不知走了多少弯路
  • a1101000099
  • a1101000099
  • 2014年08月14日 17:21
  • 2389

java调用扫描仪1

基于Applet的Web在线扫描仪控件 基于JAVAEE的B/S架构由于java语言的跨平台性 所以操控Window客户端资源能力有限, 目前比较流行是用其他语言如Delphi,VB,C++开发...
  • yx13649017813
  • yx13649017813
  • 2013年10月26日 18:39
  • 2544

TWAIN学习记录

Twain 学习纪录 一、TWAIN的文件组成 TWAIN共包括4个二进制文件。如果要使用该接口,就必须要保证他们被成功地安装在本地计算机上。   文 件 ...
  • mysouling
  • mysouling
  • 2013年03月01日 10:05
  • 5157

Java调用扫描仪2

最近碰到的问题,客户端调用本地的扫描仪,将扫描的文件上传。 使用到的技术:applet,twain,HttpClient 当然也碰到很多问题,因为在这周之前我都不知道什么是applet 一.Ap...
  • yx13649017813
  • yx13649017813
  • 2013年10月26日 18:40
  • 3273

扫描仪twain协议实现,可以实现简单控制

http://sourceforge.net/p/twain-samples/code/HEAD/tree/
  • breezegk
  • breezegk
  • 2014年11月09日 23:30
  • 1328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:★ 如何利用TWAIN实现对光栅图像输入设备(扫描仪、数码相机...)的程序设计(1) ---孙涛---
举报原因:
原因补充:

(最多只允许输入30个字)