999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Windows下掃描儀WIA驅動的實現

2015-01-16 05:26:36翁省輝喻武龍鄧世強
電子設計工程 2015年3期
關鍵詞:用戶設備

翁省輝,喻武龍,鄧世強

(北京理工大學 珠海學院,廣東 珠海 519085)

WIA是Windows image acquisition的簡稱,當前可用版本是 WIA 2.0。 它是 Windows Millennium Edition(Windows Me)或者更高版本的 Windows系統中提供的數字圖像獲取服務[1]。它是Windows系統中掃描儀獲取圖像的常用方式之一[2]。

1 WIA的體系結構

WIA是使用進程外(out of process)服務實現的 com組件,和大多數進程外服務程序不同的是,WIA通過提供自己的數據傳送機制(iwiadatatransfer接口),避免了圖像數據傳送過程中的性能損失[3]。

WIA的體系結構如圖1所示[4]。

WIA整體分為三層,由上而下分別是UI層,服務層以及驅動層。UI層與服務層之間主要通過COM Interface聯系,而服務與驅動層則主要通過Win32 API聯系。驅動層可理解為系統的USBSCAN.SYS;中間的服務層為User Mode的動態庫文 件, 它 通 過 CreateFile,ReadFile,WriteFile和 Device IOControl來實現與設備進行通訊。

圖1 WIA的體系結構Fig.1 Architecture of WIA

WIA Driver實際實現中分為兩種:MiniDriver,MiniDriver。本文將分別介紹它們的實現。

2 MiniDriver

2.1 MiniDriver的體系結構

MiniDriver分為兩個層次:WIA Service InterfaceLayer和Device Communication Layer, 其 中 Device Communication Layer就是 Low-Level driver,而 WIA Service InterfaceLayer則是實現的重點。

2.2 MiniDriver的實現

MicroDriver僅以動態庫形式實現3個接口函數,而MiniDriver則不同,它必須以COM Interface的形式實現。

MiniDriver有一個很重要的概念:Root Item和Child Item。Root Item代表設備本身,Child Item可視為設備支持的屬性,例如掃描儀支持TPA,Endorse,則它們可以被視為一個Child Item。MiniDriver初始化時需要首先創建Root Item的屬性,然后依次創建Child Item的屬性[5]。

MiniDriver在一開始初始化首先調用drvInitializeWia,須依次創建設備的Properties。

首先需要組織當前設備的特性資料,比如支持的數據格式(True Color之類)、數據傳輸方式、壓縮模式以及解析范圍等。然后調用drvInitItemProperties來初始化Child Item的Capabilities及 Properties。

初始化完成之后,便可以接受用戶的設定了,諸如掃描區域、色彩類型以及分辨率等。它主要是通過drv Write Properties來實現的,如圖2所示。

圖2 drvWriteProperties的操作示意圖Fig.2 Diagram of WriteProperties

然后是取得不同的參數,需要定義這樣一個數據:

PROPSPEC ps[9]={

{PRSPEC_PROPID,WIA_IPS_XRES},

{PRSPEC_PROPID,WIA_IPS_YRES},

{PRSPEC_PROPID,WIA_IPS_XPOS},

{PRSPEC_PROPID,WIA_IPS_YPOS},

{PRSPEC_PROPID,WIA_IPS_XEXTENT},

{PRSPEC_PROPID,WIA_IPS_YEXTENT},

{PRSPEC_PROPID,WIA_IPS_DATATYPE},

{PRSPEC_PROPID,WIA_IPS_BRIGHTNESS},

{PRSPEC_PROPID,WIA_IPS_CONTRAST},

}

這個數據用來存儲類型ID和將要獲取的掃描參數,通過調用wiasReadMutitipe來獲取值,由此可獲得掃描參數。

得到掃描參數后,便進入到數據傳輸階段了。Vista之前的系統有兩種方式:In-memory和File,Vista系統新增了一種方式:IStream Data。設備支持哪種傳輸方式,須在CWIADevice::BuildSupportedForms中指定,它是在初始化調用drvInitializeWia時調用的。如果使用In-memory傳輸,只需要將收到的掃描數據依次放入內存;如果使用FILE傳輸方式,還需要進行文件讀寫操作。傳輸時,內存空間是由PMINIDRV_TRANSFER_CONTEXT類型的參數指定的。首先需確定該參數是由WIA Sevice分配還是需要MiniDriver分配,確定方法是檢查MINIDRV_TRANSFER_CONTEXT中的參數 bClassDrvAllocBuf,當它為True時表示空間由 WIA Service分配,否則MiniDriver將在drvAcquireItemData開始時分配由另一個參數IBufferSzie指定大小的內存空間。

3 MicroDriver

WIA MicroDriver主要是針對大部分Flatbed掃描儀所設計的。因為多數Flatbed掃描儀控制邏輯相近,參數相差無幾,故而微軟公司在其上層提供了一個MiniDriver,用其管理IHV提供的MicroDriver。

3.1 MicroDriver的體系結構

MicroDriver的體系結構中的WIA Flated Driver就是系統提供的MiniDriver,Microdriver就是我們要實現的MicroDriver。這兩者之間的通訊由3個函數來實現:MicroEntry,Scan以及 SetPixelWindow。 其中,MicroEntry實現了大部分的MicroDriver的控制操作。

3.2 MicroDriver的實現

當用戶改變掃描區域時,WIA Flated Driver會調用SetPixelWindow來通知MicroDriver,當用戶確定掃描參數開始掃描時,WIA Flated Driver會調用Scan來實現掃描操作。其流程如圖3所示。

圖3 MicroDriver的掃描流程Fig.3 Scanning process of MicroDrive

Scan是同Low Level Driver通訊的橋梁,它需要確定設備的狀態,下達掃描參數然后讀取掃描數據,結束時會發送指令以通知掃描結束。

4 MiniDriver、MicroDriver實現中的關鍵問題

4.1 位圖上下顛倒問題

文件傳輸時,會先傳入文件頭。以位圖為例,

位圖的坐標是以下方為起點,而掃描儀正好相反。

如果是True Color,首先會傳入54Bytes的Bitmap File Header和Bitmap Info Header。如果不做處理的將收到的數據存入Transfer Buffer中,那么最終掃描得到的圖像將是上下顛倒的。

將bmImageHeight乘以-1可以較好地解決這一問題。關鍵實

現代碼如下:

if(lScanPhase==SCAN_START){

BITMAPINFOHEAADER UNALIGNED*pBMPInfoHeader=( BITMAPINFOHEAADER*)

(pmdtc->pTransferBuffer+14);

pBMPInfoHeader->biHeight=0- pBMPInfoHeader->biHeight;}

hr=wiasWriteBufToFile(0,pmdtc);

4.2 MiniDriver中ADF的控制

MiniDriver可以通過以下方式判斷用戶選定

的是Flated還是ADF。

LONG lDocHandingSelect=0;

hr =wiasReadPropLong (pRootItemCtx,

WIA_DPS_DOCUMENT_HANDLING_SELECT,&lDocHandingSelect,NULL,FALSE);

代碼執行完后如果lDocHandingSelect的值為1表示為ADF,為2表示Flated。之后在drvAcquireItemData中可加入多項ADF的控制操作,如檢測是否有紙等。

4.3 MicroDriver中ADF的支持

MicroDriver受到WIA Flatbed driver的制約,但是它也可實現簡單的ADF控制。MicroDriver要維護一個SCANINFO的結構,其中有3個LONG型的成員,分別是:ADF,TPA和Endorser[6]。其中ADF的值為0表示掃描儀不支持ADF;為1表示支持ADF;為2表示雙面ADF。當設定支持ADF后,還需在MicroEntry加入MicroDriver的Antomatic Document Feeder Commands的支持。值得說明的是,MicroDriver雖然支持ADF,但是ADF所支持的掃描紙張大小必須和Flated相同,也即SCANINFO中的BedWidth和BedHeight的值。同時用戶也無權設置Contrast和Indesity的范圍。如果用戶希望控制這些特性,則須實現新的MiniDriver。

5 結束語

WIA是Windows下掃描儀獲取圖像常用方式之一。本文對實現過程中一些典型問題的分析也有助于開發者更好地解決問題。本文以掃描儀為例講述了WIA的實現,對于其他設備獲取圖像技術如相機的WIA實現也具有重要的參考意義。

[1]鐘昌樂,王博.基于WIA的圖像采集接口技術的應用[J].現代計算機,2008(9):142-144.ZHONG Chang-le,WANG Bo.Application of interface technology of image acquisition based on WIA[J].Modern Computer,2008(9):142-144.

[2]鐘承,代潔,肖江文.基于低壓電流互感器自動檢定線的掃描儀驅動[J].計算機與數字工程,2013,41(3):484-487.ZHONG Cheng,DAI Jie,XIAO Jiang-wen.Scanner drive of auto verification system based on low-voltage current transformer[J].Computer and Digital Engineering,2013,41(3):484-487.

[3]盧佩斯,趙國安.基于終端-服務器模式的掃描儀圖像獲取技術[J].計算機技術與發展,2010,20(3):28-31.LU Pei-si,ZHAO Guo-an.Design of image transmission from scanner under terminal-server[J].Computer Technology and Development,2010,20(3):28-31.

[4]Microsoft Inc.Windows Image Acquisition Drivers[EB/OL].[2014-01-01].http://msdn.microsoft.com/en-us/library/ff551467(v=vs.85).aspx.

[5]王恒升,匡洋,彭宏道.USB HID類設備小驅動程序開發[J].控制工程,2010,17(6):815-819.WANG Heng-sheng,KUANG Yang,PENG Hong-dao.Development of USB HID minidriver[J].Control Engineering of China,2010,17(6):815-819.

[6]尹東,王巍.TWAIN的原理及其應用開發 [J].信息技術,2001(9):15-16.YIN Dong,WANG Wei.Principle and application of TWAIN[J].Information Technology,2001(9):15-16.

猜你喜歡
用戶設備
諧響應分析在設備減振中的應用
基于VB6.0+Access2010開發的設備管理信息系統
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
如何在設備采購中節省成本
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 国产精品lululu在线观看| 国产91麻豆免费观看| 国产成人91精品| 亚洲视频影院| a级毛片免费网站| 日韩成人午夜| 日韩大乳视频中文字幕| 一本久道久综合久久鬼色| 国产在线视频导航| 99re视频在线| 国产精品毛片在线直播完整版| 精品五夜婷香蕉国产线看观看| 制服丝袜在线视频香蕉| 69免费在线视频| 午夜欧美理论2019理论| 亚洲国产成人久久精品软件| 999国产精品永久免费视频精品久久| 国产成人亚洲欧美激情| 国产欧美日韩在线一区| 久久91精品牛牛| 毛片一区二区在线看| 98精品全国免费观看视频| 精品成人一区二区三区电影| 亚洲三级影院| 无码精油按摩潮喷在线播放| 午夜精品久久久久久久无码软件| 亚洲国产第一区二区香蕉| 欧美无专区| 亚洲精品男人天堂| 免费精品一区二区h| 尤物亚洲最大AV无码网站| 国产微拍一区| 午夜电影在线观看国产1区| 亚洲第一视频免费在线| 国产成人午夜福利免费无码r| 粉嫩国产白浆在线观看| 精品人妻一区二区三区蜜桃AⅤ| 亚洲天堂高清| 婷婷亚洲最大| 美女潮喷出白浆在线观看视频| 免费毛片网站在线观看| 国产亚洲视频中文字幕视频| 欧美日一级片| 成人综合在线观看| 亚洲不卡网| 蜜芽国产尤物av尤物在线看| 精品夜恋影院亚洲欧洲| 国产午夜精品一区二区三| 久久国产精品嫖妓| 国产靠逼视频| 三上悠亚一区二区| 手机精品福利在线观看| 国产理论精品| jizz国产在线| 欧美狠狠干| 亚洲国产天堂在线观看| 人人艹人人爽| 国产正在播放| 亚洲国产看片基地久久1024| 福利一区三区| 久久99国产综合精品1| 国产精品一区二区在线播放| 国产在线视频自拍| 久久天天躁狠狠躁夜夜2020一| 亚洲精品第一页不卡| 国产69精品久久久久妇女| 1769国产精品视频免费观看| 国产欧美日韩资源在线观看| 色婷婷狠狠干| 国产熟女一级毛片| 国产玖玖视频| 美女高潮全身流白浆福利区| 久久精品无码一区二区国产区| 亚洲欧美日韩中文字幕一区二区三区| 日韩区欧美国产区在线观看| 国产午夜福利亚洲第一| 99热亚洲精品6码| 午夜性爽视频男人的天堂| 99国产精品免费观看视频| 欧美天天干| 亚洲最大福利视频网| 国内精品九九久久久精品|