ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:31KB ,
资源ID:30431950      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30431950.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TWAIN学习笔记.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

TWAIN学习笔记.docx

1、TWAIN学习笔记TWAIN学习笔记 2008-10-06 TWAIN学习笔记(壹) ? TWAIN,定义了一套标准的软件协议(software protocol)和应用程序编程接口 (application programming interface(API))。使用它实现软件应用程序和图象获取设备(扫描仪)之间的通讯。我们见到的情况是:从FILE菜单下选取ACQUIRE就弹出了扫描软件。 四层: Application,Protocol,Acquisition,Device 用户层,用户的应用程序,界面之类的东西 ? 协议层,把用户的请求转换成TWAIN明白的内容 ? 请求层,向下请求内容

2、,可以是硬件也可以是数据库 ? 硬件层,数据的来源 ? 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代码类似于

3、: 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 da

4、ta 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: D

5、AT_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被D

6、G_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

7、操作动作,例如打开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_IMAG

8、EFILEXFER/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: Tran

9、sfer 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。

10、Native:所有的Source都必须支持的模式,但是有限制性(例如限制于DIB或者PICT格式,受可用内存的限制),Win下,DIB格式(Device-Independent Bitmap),Source给文件分配一个内存块,将指针返回给应用,应用负责转换数据之后释放这块内存。 Disk File:推荐Source支持这种模式,应用程序创建一个Source支持格式的文件,易于读写,尤其是可以避免遇到内存问题。稍微比之后讨论的Buffered模式慢,但比他好操作,并且之后应用程序要操作清理这个文件。 Buffered Memory:所有的Source必须支持该模式。 MD,被关闭了,没保存。

11、通过一个或多个缓存来实现传输,应用层来分配内存的使用和释放。数据以一无格式位图(unformatted bitmap)传输,应用需要在传输过程中 (TW_IMAGEINFO&TW_IMAGEMEMXFER)用信息标识各个缓存和正确识别位图。于Native和Disk File的一个动作结束传输相比,这种模式可能要多次循环。 应用层实现: TWAIN的实现层次: 最小实现:使用TWAIN默认的,只在Native本机模式,请求单独一个图片。 ? 基本实现: ? 最大实现: ? 安装SM(Source Manager)软件: TWAIN Working Group(TWG)给Win提供四个包: TWA

12、IN_32.DLL:32位程序用 ? TWAIN.DLL:16位程序用 ? TWUNKER_32.EXE:让16位应用程序链接32位的数据源 ? TWUNKER_16.EXE:让32位应用程序链接16位源,注意,16位源不能再NT上面正确运行 ? SM四个文件Win文件夹下,比如C:Winnt,C:Windows. 微软提供了一个VER.DLL包,用于安装SM。VER.DLL,VER.LIB,VER.H包括在安装包Toolkit里面。VER.DLL是可以自由使用和发布的。 TWAIN要开始,要做三个准备: 添加应用的用户接口用来选择数据源和请求菜单选择:必须有选择源(Select Source

13、.和Acquire.) ? 将TWAIN.H引用到程序中:包括所有必须的定义 ? 更改应用的事件循环: 可以开很多个源,但是每次只能持有一个。 o 传递事件给Source o 通知应用,源准备好了或者关闭接口 o 硬件事件发生的时候通知应用。 ? 三个目标的实现如下: 靠 下面全都是具体实现,不想弄了。 靠 算了,复制粘贴一下。谁帮个忙。 第一个目标,传递事件(从应用到源): 只要源激活了,为了确保源能接受和执行事件,应用必须将所有事件,在源激活期间,统统传过去。 如:DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT TW_EVENT结构如下: C代码 1. type

14、def struct 2. TW_MEMREF pEvent; /* Windows pMSG or MAC pEvent */ 3. TW_UINT16 TWMessage; /* TW message from Source to */ 4. /* the application */ 5. TW_EVENT, FAR *pTW_EVENT; pEvent在Win下,指向message structure。源从SM接收到信息,决定是否属于它, 如果是:源执行事件,然后设置返回码为TWRC_DSEVENT,以示它是Source事件,并且设置TW_Event结构的TWMessage到MSG_N

15、ULL, ? 如果不是:设置返回码为TWRC_NOTDSEVENT,设置TWMessage到MSG_NULL,应用从DSM_Entry接收到信息,然后在循环里面装作没事情一样执行。 ? 第二和第三个目标,(从源到事件) 当源准备好了, 通知应用,通过TW_EVENT.TWMessage,有下面四个选项: MSG_XFERREADY:标示数据已经准备好了 ? MSG_CLOSEDSREQ:关闭Source的用户接口 ? MSG_CLOSEDSOK:同上,不过只用在DG_CONTROL / DAT_USERINTERFACE / MSG_ENABLEDSUIONLY ? MSG_DEVICEEVE

16、NT:报告设备事件发生 ? Win下,修改循环的例子代码: C代码 1. TW_EVENT twEvent; 2. TW_INT16 rc; 3. while (GetMessage ( (LPMSG) pOrigin:TW_IDENTITY,从应用和源链接上之后不能改变。 ? pDest:如果操作最后目标是SM,设置为NULL,否则指向源 ? DG_XXX:DG_CONTROL,DG_IMAGE,DG_AUDIO目前是被定义掉了的,可以自定义数据组。 ? DAT_XXX:描述pData对象的唯一标示(结构或者变量) ? MSG_XXX:动作的描述 ? pData:操作用到的TW_XXX结构或

17、者变量,类型有DAT_XXX描述。 ? There are nine operation triplets that can be sent from the application to be consumed by the Source Manager. 有九个手术双胞胎,可发出的申请将消费源管理器。 从应用到SM,(我们公司的人事很有味道 ),DG统统属于DG_CONTROL,DAT 有三个:DAT_IDENTITY,DAT_PARENT,DAT_STATUS。下面的列表是DAT下面的MSG组合: DG_CONTROL/DAT_IDENTITY MSG_CLOSEDS: MSG_GETD

18、EFAULT : MSG_GETFIRST : MSG_GETNEXT : MSG_OPENDS : MSG_USERSELECT : DG_CONTROL / DAT_PARENT MSG_CLOSEDSM : MSG_OPENDSM : DG_CONTROL / DAT_STATUS MSG_GET : 从应用到源: 参数通过DSM_Entry调用,第一个集是DG_CONTROL,定义了DG能在所有的TWAIN设备上运用的。第二个集,定义为DG_IMAGE。 DG_CONTROL / DAT_CAPABILITY MSG_GET MSG_GETCURRENT MSG_GETDEFAULT

19、MSG_RESET : (能力值,扫描仪这类东西能干啥) 获取能力值,包括当前的和默认的 获取能力值当前值 获取源的默认首选能力值 将当前源能力值转成TWAIN定义的默认值 准备关闭源 获取默认源的标识信息 获取第一个活动源的标识信息 获取下一个活动源的标识信息 装载且初始化源 弹出“选择源”的对话框 准备关闭SM 初始化SM 返回SM当前状态码 MSG_SET : DG_CONTROL / DAT_DEVICEEVENT MSG_GET : DG_CONTROL / DAT_EVENT MSG_PROCESSEVENT : DG_CONTROL / DAT_FILESYSTEM MSG_AU

20、TOMATICCAPTUREDIRECTORY : 设定能力值 DG_CONTROL / DAT_NULL / MSG_DEVICEEVENT 从应用传递事件到源 选择目录自动接收图像 MSG_CHANGEDIRECTORY : MSG_COPY : MSG_CREATEDIRECTORY : MSG_DELETE : MSG_FORMATMEDIA : MSG_GETCLOSE MSG_GETFIRSTFILE MSG_GETINFO MSG_RENAME DG_CONTROL/DAT_PASSTHRU/MSG_PASSTHRU MSG_PASSTHRU DG_CONTROL / DAT_P

21、ENDINGXFERS MSG_ENDXFER MSG_GET MSG_RESET MSG_STOPFEEDER DG_CONTROL / DAT_SETUPFILEXFER MSG_GET MSG_GETDEFAULT MSG_RESET MSG_SET DG_CONTROL / DAT_SETUPFILEXFER2 MSG_GET MSG_GETDEFAULT MSG_RESET MSG_SET DG_CONTROL / DAT_SETUPMEMXFER MSG_GET 更改当前domain,host,dir,设备 拷贝文件 建立一个目录文件夹 删除一个目录文件夹 格式化存储设备(?那么牛

22、) 关闭MSG_GETFILEFIRST打开的上下文 获取目录里第一个文件 获取当前文件上下文的信息 重命名一文件 用特殊命令。(无聊厂家提供的特殊功能) 应用接收或者请求结束数据传输 返回源准备提供的传输 重置 强行停止ADF 返回文件的信息,文件将被源写入请求的数据 返回默认的文件传输信息 重置当前文件信息 为下一个文件传输设置信息 跟上面一样 跟上面一样 跟上面一样 跟上面一样 返回源的最优,最小和最大的缓冲值 DG_CONTROL / DAT_STATUS MSG_GET DG_CONTROL / DAT_USERINTERFACE MSG_DISABLEDS MSG_ENABLEDS

23、 DG_CONTROL / DAT_XFERGROUP MSG_GET 从源返回当前状态码 关闭源的用户接口 激活源的用户接口 给下面传输返回DG,目前支持DG_IMAGE或自定DG 上回说到从应用到源的三胞胎的第一组设置,现在说第二组DG_IMAGE DG_IMAGE / DAT_CIECOLOR MSG_GET DG_IMAGE / DAT_GRAYRESPONSE MSG_RESET MSG_SET DG_IMAGE / DAT_IMAGEFILEXFER MSG_GET DG_IMAGE / DAT_IMAGEINFO MSG_GET DG_IMAGE / DAT_IMAGELAYOU

24、T MSG_GET MSG_GETDEFAULT MSG_RESET MSG_SET DG_IMAGE / DAT_IMAGEMEMXFER MSG_GET MSG_GET MSG_GET MSG_GETDEFAULT MSG_RESET MSG_SET DG_IMAGE / DAT_PALETTE8 MSG_GET MSG_GETDEFAULT MSG_RESET MSG_SET 给当前的传输返回CIE XYZ信息 灰度默认值 设置灰度值 用Disk File模式初始化图形图像请求 返回准备传输的图形图像的信息 给“原始”图像描述物理布局/位置 获取图的默认布局信息 将下个图传输布局信息设成

25、默认值 设置下个图传输的布局信息 以缓存模式初始化图请求 以本地模式初始化图请求 获取当前传输的JPEG压缩参数 获取默认的JPEG压缩参数 使用源的默认JPEG压缩值 使用指定的JPEG压缩值 获取当前传输信息 获取源默认的调色板信息 使用源默认的调色板 使用指定的调色板 DG_IMAGE / DAT_IMAGENATIVEXFER DG_IMAGE / DAT_JPEGCOMPRESSION DG_IMAGE / DAT_RGBRESPONSE MSG_RESET MSG_SET DG_AUDIO / DAT_AUDIOFILEXFER MSG_GET : DG_AUDIO / DAT_A

26、UDIOINFO MSG_GET : MSG_GET 使用默认的RGB值 设定RGB值 文件(File)模式传音频数据 获取当前传输的信息(av的上半集) 本地模式(Native)传输音频(audio)数据 DG_AUDIO / DAT_AUDIONATIVEXFER 以上说的是三胞胎(triplet,这个变态的翻译好记点,别学我), DG_XXX,DAT_XXX,MSG_XXX由上面的决定,剩下的几个补充如下: pOrigin:源,应用程序的TW_IDENTITY结构的副本 ? pDest:如果操作对象是SM,值一定是NULL,如果是源,该参数引用源的TW_IDENTITY结构的一副本,返回

27、给应用 ? pData:由之前的DAT_XXX来定义是什么类型。通常,对应的用TW_XXX来命名数据结构。如:DAT_IDENTITY对应的就是TW_XXX。TWAIN.H里面定义了全部的结构。应用负责所有的分配和释放以及检查。 ? 最短的一章,下面那个一个整体,实在对不起啊兄弟,委屈你太监了。 DIB(自XX百科) C代码 1. DIB,全称Device Independent Bitmap,设备无关位图文件,这是一种文件格式,其目的是为了保证用某个应用程序创建的位图图形可以被其它应用程序装载或显示一样。 2. 3. DIB(Device-indepentent bitmap)的与设备无关性

28、主要体现在以下两个方面: 4. DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。 5. 256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。 6. 由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象。 7. DIB还可以用一种RLE算法来压缩图像数据,但一般来说DIB是不压缩的。 8. DIB的结构 9. 与Borland C+下的框架类库OWL不同,MFC未提

29、供现成的类来封装DIB。尽管Microsoft列出了一些理由,但没有DIB类确实给MFC用户带来很多不便。用户要想使用DIB,首先应该了解DIB的结构。 10. 在内存中,一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存储像素阵列的数组。BITMAPINFO描述了位图的大小,颜色模式和调色板等各种属性,其定义为 11. typedef struct tagBITMAPINFO 12. BITMAPINFOHEADER bmiHeader; 13. RGBQUAD bmiColors1; /颜色表 14. BITMAPINFO; 15. RGBQUAD结构用来描述颜色,其定义为

30、 16. typedef struct tagRGBQUAD 17. BYTE rgbBlue; /蓝色的强度 18. BYTE rgbGreen; /绿色的强度 19. BYTE rgbRed; /红色的强度 20. BYTE rgbReserved; /保留字节,为0 21. RGBQUAD; 22. 注意,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。 23. BITMAPINFOHEADER结构包含了DIB的各种信息,其定义为 24. typedef struct tagBITMAPINFOHEADER 25. DWORD biSize; /该结构的大小 26. LONG biWidth; /位图的宽度(以像素为单位) 27. LONG biHeight; /位图的高度(以像素为单位) 28. WORD biPlanes; /必须为1 29. WORD biBitCount /每个像素的位数(1、4、8、16、24或32) 30. DWORD biCompression; /压缩方式,一般为0或BI_RGB (未压缩) 31. DWORD biSizeImage; /以字节为单位的图象大小(仅用于压缩位图) 32. LONG biXPelsPerMeter; /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1