TWAIN协议学习笔记
TWAIN定义了图像设备(扫描仪,数码相机)和应用之间相互通信的协议,各个设备厂商通过支持TWAIN协议使得上层应用可以用同样的代码去访问不同扫描仪
TWAIN主要包括三个要素:
Application - 使用TWAIN的图像应用,如Photoshop,
Source Manager - 用来管理数据源和应用之间的交互,这个模块由TWAIN Group来维护,并提供开源代码(https://github.com/twain/twain-dsm)。windows提供默认实现TWAIN32.dll但是只支持到1.7版本,这个版本最早是存在于windows98 和NT5.0,直到今天也没升级过。 通常application或source安装时应该提供更新版本,下载最新代码编译后的版本号是2.4,最终二进制文件如下
Winddows:TWAINDSM.dll
Mac:Twain.framework
Linux:/usr/local/lib/libtwaindsm.so
Data Source - 主要用于控制图像设备,这块主要由硬件厂商开发,
目前TWAIN协议最新版本号是2.4。对于TWAIN来说,版本2.0是个分水岭(于2010年制定),这个版本定义了图像设备允许支持windows,Mac,Linux,并可以允许在x86和x64位系统,目前来说很多硬件厂商都没有对TWAIN Source升级到2.x,所以一般来说应用程序遵循1.x标准也可以使用大多数扫描仪
通信接口
三个要素之间通信通过DSM_Entry()和DS_Entry()两个接口,
开发TWAIN应用
应用程序无法之间操作source,所有对source的请求都是通过Source Manager完成DSM_Entry(),根据TWAIN协议推荐,所有的TWAIN命令调用最好在同一个线程完成
当应用使用TWAIN 1.x时,需要提供一个windows句柄接收source的事件
TW_UINT16 TW_CALLINGSTYLE DSM_Entry
( pTW_IDENTITY pOrigin, // source of message
pTW_IDENTITY pDest, // destination of message
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 // pointer to data
);
pOrigin - 应用程序信息
pDest - 目标信息,如果是Source Manager,是NULL,如果是Source,则为这个Source的Identity
DG- 操作数据组
DAT -操作数据类型
MSG-消息ID
其中DG/DAT/MSG称为twain的操作组
twain session
操作扫描仪需要在session内完成,每个TWAIN session包括7个状态,不同的状态使用不同操作组对source操作和状态转移,应用程序应该遵循状态对source进行操作。但TWAIN并不强制要求每个source按照state1到state7的步骤进行状态转移,比如很多程序在load sourcemanager(state 3)后暂停,然后重复state4-state7(重复选择扫描仪进行扫描)
- State 1 to 2 -加载source manager 获取 DSM_Entry接口
- State 2 to 3 - 打开source manager
- State 3 - 选择 Source
- State 3 to 4 - 打开 Source
- State 4 - 设置source的capacity
- State 4 to 5 - 请求从source获取数据
- State 5 to 6 - 数据可以准备消息
- State 6 to 7 - 开始数据传输
- State 7 to 6 to 5 - 完成传输
- State 5 to 1 - 断开连接
停止扫描两种方法
MSG_STOPFEDDER -发送停止扫描命令,,扫描仪会将扫描过的图片发过来
MSG_RESET -发送停止扫描命令,,扫描仪不会将扫描过的图片发过来,调完这个命令后,TWAIN状态将直接到SourceEnabled
转载于:https://www.cnblogs.com/myhw/p/8378546.html
TWAIN协议学习笔记相关推荐
- Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】
Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...
- POP3协议学习笔记
今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...
- CoAP协议学习笔记 1.3 用UDP工具来调试CoAP
1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...
- 网络协议学习笔记 · 22
IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...
- CoAP协议学习笔记 1.2 一张表了解 CoAP 协议
1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...
- CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍
CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...
- BGP协议学习笔记——BGP基础
BGP协议学习笔记--BGP基础(BGP概念.BGP报文.BGP状态机.BGP关系建立.BGP路由通告) 说明:本文学习笔记整理自网络.华为公开产品文档.华为公开PPT及部分的自我理解 一.BGP简介 ...
- 极客HTTP协议学习笔记破冰篇(1-7)
极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...
最新文章
- MongoDB3.4安装及卸载
- JQuery Highcharts图表控件使用说明
- 优酷视频如何在手机进行安全设置?
- 【kafka】记一次线上kafka一直rebalance故障 消费慢 数据积压
- html dw map,DW十六 map标签
- 为什么有人说手机很少有白色的出现了?
- 蓝桥杯 BEGIN-4 入门训练 Fibonacci数列
- opencv 最大内接矩形_OpenCV之二值图像分析 – 寻找最大内接圆
- 器械传递的方法_天津304不锈钢传递窗报价_碧海云天
- Realtek显示芯片方案设计 RTD2270 RTD2281 RTD2513 RTD2525 RTD2556 RTD2785 RTD2795T 2796 VGA DVI HDMI DP转LVDS
- python量化股票源码_使用Python写一个量化股票提醒系统
- 详解c语言编程库题,详解C语言编程
- 《半小时漫画经济学》读书摘记
- 任务栏谷歌图标和其他图标重叠(如钉钉)的解决方法
- Android必知必会--NinePatch图片制作
- 申宝股票-抱团股继续杀跌
- 字体查看器,源码奉上
- DBUtils学习记录(传智播客视频)
- Mybatis错误总结
- 日常英语口语练习-情景交际场景25(三)
热门文章
- STL库容器vector at函数
- 让C++对象只能分配到堆/栈和静态区上并判断分配位置
- STL容器的线程安全
- 程序猿段子_【新年新气象】今年,能为程序员男友做点什么?
- 关于loader asyncTaskLoader AsyncTask的理解
- linux 日志按大小切割_日志切割工具logrotate,帮你管理你的日志文件
- 如何禁止网络爬虫频繁爬自己网站
- Clojure入门教程: Clojure – Functional Programming for the JVM中文版
- poi jxl 生成EXCEL 报表
- Eugeny and Array(水题,注意题目描述即可)