TWAIN协议学习笔记
TWAIN定義了圖像設備(掃描儀,數(shù)碼相機)和應用之間相互通信的協(xié)議,各個設備廠商通過支持TWAIN協(xié)議使得上層應用可以用同樣的代碼去訪問不同掃描儀
TWAIN主要包括三個要素:
Application - 使用TWAIN的圖像應用,如Photoshop,
Source Manager - 用來管理數(shù)據(jù)源和應用之間的交互,這個模塊由TWAIN Group來維護,并提供開源代碼(https://github.com/twain/twain-dsm)。windows提供默認實現(xiàn)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 - 主要用于控制圖像設備,這塊主要由硬件廠商開發(fā),
?
?目前TWAIN協(xié)議最新版本號是2.4。對于TWAIN來說,版本2.0是個分水嶺(于2010年制定),這個版本定義了圖像設備允許支持windows,Mac,Linux,并可以允許在x86和x64位系統(tǒng),目前來說很多硬件廠商都沒有對TWAIN Source升級到2.x,所以一般來說應用程序遵循1.x標準也可以使用大多數(shù)掃描儀
通信接口
三個要素之間通信通過DSM_Entry()和DS_Entry()兩個接口,
開發(fā)TWAIN應用
應用程序無法之間操作source,所有對source的請求都是通過Source Manager完成DSM_Entry(),根據(jù)TWAIN協(xié)議推薦,所有的TWAIN命令調(diào)用最好在同一個線程完成
當應用使用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- 操作數(shù)據(jù)組
DAT -操作數(shù)據(jù)類型
MSG-消息ID
其中DG/DAT/MSG稱為twain的操作組
twain session
操作掃描儀需要在session內(nèi)完成,每個TWAIN session包括7個狀態(tài),不同的狀態(tài)使用不同操作組對source操作和狀態(tài)轉(zhuǎn)移,應用程序應該遵循狀態(tài)對source進行操作。但TWAIN并不強制要求每個source按照state1到state7的步驟進行狀態(tài)轉(zhuǎn)移,比如很多程序在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獲取數(shù)據(jù)
- State 5 to 6 - 數(shù)據(jù)可以準備消息
- State 6 to 7 - 開始數(shù)據(jù)傳輸
- State 7 to 6 to 5 - 完成傳輸
- State 5 to 1 - 斷開連接
?
停止掃描兩種方法
MSG_STOPFEDDER -發(fā)送停止掃描命令,,掃描儀會將掃描過的圖片發(fā)過來
MSG_RESET -發(fā)送停止掃描命令,,掃描儀不會將掃描過的圖片發(fā)過來,調(diào)完這個命令后,TWAIN狀態(tài)將直接到SourceEnabled
轉(zhuǎn)載于:https://www.cnblogs.com/myhw/p/8378546.html
總結(jié)
以上是生活随笔為你收集整理的TWAIN协议学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis @sqlprovide
- 下一篇: AI 趋势