亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Windows下掃描儀WIA驅(qū)動的實現(xiàn)

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

        翁省輝,喻武龍,鄧世強

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

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

        1 WIA的體系結(jié)構(gòu)

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

        WIA的體系結(jié)構(gòu)如圖1所示[4]。

        WIA整體分為三層,由上而下分別是UI層,服務(wù)層以及驅(qū)動層。UI層與服務(wù)層之間主要通過COM Interface聯(lián)系,而服務(wù)與驅(qū)動層則主要通過Win32 API聯(lián)系。驅(qū)動層可理解為系統(tǒng)的USBSCAN.SYS;中間的服務(wù)層為User Mode的動態(tài)庫文 件, 它 通 過 CreateFile,ReadFile,WriteFile和 Device IOControl來實現(xiàn)與設(shè)備進行通訊。

        圖1 WIA的體系結(jié)構(gòu)Fig.1 Architecture of WIA

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

        2 MiniDriver

        2.1 MiniDriver的體系結(jié)構(gòu)

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

        2.2 MiniDriver的實現(xiàn)

        MicroDriver僅以動態(tài)庫形式實現(xiàn)3個接口函數(shù),而MiniDriver則不同,它必須以COM Interface的形式實現(xiàn)。

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

        MiniDriver在一開始初始化首先調(diào)用drvInitializeWia,須依次創(chuàng)建設(shè)備的Properties。

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

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

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

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

        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},

        }

        這個數(shù)據(jù)用來存儲類型ID和將要獲取的掃描參數(shù),通過調(diào)用wiasReadMutitipe來獲取值,由此可獲得掃描參數(shù)。

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

        3 MicroDriver

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

        3.1 MicroDriver的體系結(jié)構(gòu)

        MicroDriver的體系結(jié)構(gòu)中的WIA Flated Driver就是系統(tǒng)提供的MiniDriver,Microdriver就是我們要實現(xiàn)的MicroDriver。這兩者之間的通訊由3個函數(shù)來實現(xiàn):MicroEntry,Scan以及 SetPixelWindow。 其中,MicroEntry實現(xiàn)了大部分的MicroDriver的控制操作。

        3.2 MicroDriver的實現(xiàn)

        當(dāng)用戶改變掃描區(qū)域時,WIA Flated Driver會調(diào)用SetPixelWindow來通知MicroDriver,當(dāng)用戶確定掃描參數(shù)開始掃描時,WIA Flated Driver會調(diào)用Scan來實現(xiàn)掃描操作。其流程如圖3所示。

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

        Scan是同Low Level Driver通訊的橋梁,它需要確定設(shè)備的狀態(tài),下達掃描參數(shù)然后讀取掃描數(shù)據(jù),結(jié)束時會發(fā)送指令以通知掃描結(jié)束。

        4 MiniDriver、MicroDriver實現(xiàn)中的關(guān)鍵問題

        4.1 位圖上下顛倒問題

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

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

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

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

        現(xiàn)代碼如下:

        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,F(xiàn)ALSE);

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

        4.3 MicroDriver中ADF的支持

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

        5 結(jié)束語

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

        [1]鐘昌樂,王博.基于WIA的圖像采集接口技術(shù)的應(yīng)用[J].現(xiàn)代計算機,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]鐘承,代潔,肖江文.基于低壓電流互感器自動檢定線的掃描儀驅(qū)動[J].計算機與數(shù)字工程,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]盧佩斯,趙國安.基于終端-服務(wù)器模式的掃描儀圖像獲取技術(shù)[J].計算機技術(shù)與發(fā)展,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類設(shè)備小驅(qū)動程序開發(fā)[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的原理及其應(yīng)用開發(fā) [J].信息技術(shù),2001(9):15-16.YIN Dong,WANG Wei.Principle and application of TWAIN[J].Information Technology,2001(9):15-16.

        猜你喜歡
        用戶設(shè)備
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        基于VB6.0+Access2010開發(fā)的設(shè)備管理信息系統(tǒng)
        基于MPU6050簡單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        500kV輸變電設(shè)備運行維護探討
        如何在設(shè)備采購中節(jié)省成本
        Camera360:拍出5億用戶
        100萬用戶
        深夜放纵内射少妇| 国产精品自在在线午夜出白浆| 风流少妇又紧又爽又丰满| 欧美中出在线| 男子把美女裙子脱了摸她内裤| 天堂麻豆精品在线观看| 久久亚洲中文字幕乱码| 亚洲日韩中文字幕无码一区| 国产成人无码av在线播放dvd| 欧美日韩国产综合aⅴ| 久久亚洲精彩无码天堂| 日本免费三片在线播放| 最新中文字幕日韩精品| 不卡一卡二卡三乱码免费网站| 无码毛片aaa在线| 国内精品国产三级国产av另类| 亚洲av第一区综合激情久久久| 蜜桃传媒网站在线观看| 日本熟妇美熟bbw| 国语精品一区二区三区| 亚洲日本va99在线| 亚洲一区二区三区最新视频| 蜜桃臀av一区二区三区| 国产精品久久人妻无码| 亚洲精品国产精品国自产观看| 亚洲色四在线视频观看| 亚洲一区二区三区18| 熟妇人妻无乱码中文字幕av| 精品国产av一区二区三区| 国产女合集小岁9三部| 久久久亚洲精品免费视频| 日本a级一级淫片免费观看| 三年的高清电影免费看| 又色又爽又黄又硬的视频免费观看| 国产精品一区二区韩国AV| 白丝美女扒开内露出内裤视频| 久久久精品午夜免费不卡| 99久久伊人精品综合观看| 亚洲精品第一页国产精品| 国产亚洲女人久久久久久| 亚洲av成熟国产精品一区二区|