現在使用掃描器、數位照相機、以及其他圖像獲得裝置的應用越來越多了,使用者越來越希望把這些獲得的圖像加入到自己的檔案或其他工作中。然而,要顯示并操作這些圖像的光栅資料需要應用程式開發人員進行較大的工作。
一種比較簡單的實作是通過是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為應用
程式傳輸資料。它使用這個格式在Source和Application間實作傳輸機制。
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進行操作。
Application于Source 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将調用Source的DS_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進行操作。
Application于Source 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将調用Source的DS_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 層是最重要的。這層就不介紹了。