從 TWAIN 裝置中掃描影象
一、簡介
TWAIN 資料來源管理程式 (DSM) 工業標準的軟體庫,用於從靜態影象裝置提取影象。絕大部分的掃描器和數碼相機都提供了 TWAIN 驅動程式,利用統一的 TWAIN 介面,應用程式可以非常方便地從這些裝置中獲取影象。
二、使用步驟
網際網路上關於 TWAIN 程式設計的中文資料很少,程式碼更是難找到,因此我不得不仔細閱讀了 http://www.twain.org/ 提供的 TWAIN Specification。下面說說使用 TWAIN 介面獲取影象的簡要步驟。
Windows 系統中存在一個 TWAIN_32.dll,所有的 TWAIN 操作都是通過這個 DLL 匯出的 DSM_Entry 函式來實現的 (說實在話,我個人覺得 TWAIN 介面設計得太差了,看看 MS 的WIA,邏輯上非常清晰)。這個函式的宣告如下:
TW_UINT16 FAR PASCAL 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
);
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
);
TWAIN定義了大約140個操作訊息。
1. 開啟 DSM (Data Source Manager: 資料來源管理器)
TWAIN 是一個資料來源管理程式,應用程式首先要使用 MSG_OPENDSM 訊息,開啟資料來源管理器。這裡需要指定一個視窗控制程式碼,應用程式應該在此視窗的訊息迴圈中處理 TWAIN 訊息 (MSG_PROCESSEVENT)。
2. 選擇 DS (Data Source: 資料來源)
因為一個系統中可能存在多個 TWAIN 裝置,因此必須選擇一個資料來源。選擇資料來源通常有兩種方式: 選擇預設資料來源 (MSG_GETDEFAULT) 和顯示選擇資料來源對話方塊,由使用者來選擇資料來源 (MSG_USERSELECT)。
3. 開啟 DS
使用 MSG_OPENDS 訊息開啟資料來源。
4. 設定引數
訊息為 MSG_SET,設定各種引數,如獲取方式、影象數量等。有些引數由裝置驅動支援才有效。
5. 顯示掃描介面
使用 MSG_ENABLEDS 訊息,顯示裝置驅動提供的使用者介面 (UI)。
6. 獲取影象
如果使用者選擇掃描什麼的,可以在視窗的訊息迴圈中獲取到這個事件 (MSG_XFERREADY)。此時,應用程式可以通過 DAT_SETUPFILEXFER 設定檔名,然後用 DAT_IMAGEFILEXFER 獲取影象到檔案中。
7. 關閉掃描介面
在視窗的訊息迴圈中獲取到 MSG_CLOSEDSREQ 或 MSG_CLOSEDSOK 訊息,可以關閉掃描介面 (MSG_DISABLEDS)。
8. 關閉 DS
訊息為 MSG_CLOSEDS。
9. 關閉DSM
訊息為 MSG_CLOSEDSM。
訊息為 MSG_CLOSEDSM。
三、後話
當然,上面只是一種常用的步驟。其實應用程式完全可以自定義所有的步驟,比如不使用 TWAIN 驅動提供掃描對話方塊而直接掃描,或者掃描影象到記憶體中等等。詳細情況請參考 TWAIN Specification,步驟大同小異,訊息和引數千差萬別,仔細看看應該很容易的。
如果沒有 TWAIN 裝置又要進行 TWAIN 程式開發,可以到 TWAIN 官方網站下載 TWAIN Developers Toolkit,安裝後會有一個虛擬的 TWAIN 裝置。不過應用程式在這個虛擬 TWAIN 裝置中正常工作,不代表一定能在實際的 TWAIN 裝置正常使用,這點需要注意。以前 CTwainHelper 就碰到過這樣的情況 在虛擬 TWAIN 裝置中明明是好的,在我的掃描器上卻不能掃描影象。檢查後發現,原來設定了不支援的引數。
最後,TWAIN 是 Technology Without A Interesting Name 縮寫,直譯為沒有“沒有讓人感興趣名字的技術”,真是一個讓人摸不著頭腦的名字。
最後,TWAIN 是 Technology Without A Interesting Name 縮寫,直譯為沒有“沒有讓人感興趣名字的技術”,真是一個讓人摸不著頭腦的名字。
相關文章
- TWAIN掃描識別控制元件:Web應用程式的掃描器SDKAI控制元件Web
- 利用TWAIN-實現與影象輸入裝置的通訊AI
- 手持裝置掃描槍開發
- 原始碼掃描裝置/軟體列表原始碼
- BCSphere入門教程03:掃描周圍裝置
- MySQL中的全表掃描和索引樹掃描MySql索引
- vuls掃描安裝文件
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- C# Twain協議呼叫掃描器,設定多影像輸出模式(Multi image output)C#AI協議模式
- 掃描技術和掃描工具
- 電腦執行twincat2掃描ethercat裝置並進行控制
- QingScan掃描器安裝、使用
- AWVS掃描器掃描web漏洞操作Web
- win10系統掃描器提示掃描不到掃描器如何解決Win10
- 掃描王 for Mac專業圖片掃描工具Mac
- Nmap掃描教程之基礎掃描詳解
- ubuntu安裝zbar二維碼掃描Ubuntu
- 掃描器在工作中的使用
- 埠掃描器
- 安全掃描工具
- 綜合掃描工具
- Nessus漏洞掃描教程之安裝Nessus工具
- 京東掃描平臺EOS—JS掃描落地與實踐JS
- DAST 黑盒漏洞掃描器 第四篇:掃描效能AST
- 藍芽掃描工具btscanner修復暴力掃描模式藍芽模式
- iOS 使用CIDetector掃描相簿二維碼、原生掃描iOSIDE
- 索引全掃描和索引快速全掃描的區別索引
- 電腦掃描檔案怎麼掃描 win10電腦掃描檔案方法介紹Win10
- 在Linux中,什麼是埠掃描?如何使用工具如nmap進行埠掃描?Linux
- 存取Oracle當中掃描資料的方法Oracle
- 智慧掃描支援從MySQL例項線上抓取慢SQLMySql
- oracle 全表掃描,索引範圍掃描與塊的理解Oracle索引
- Zenmap(埠掃描工具)
- 淺談掃描線
- python掃描埠Python
- python 埠掃描Python
- 域名掃描工具Fierce
- direasch目錄掃描