在C#中使用WIA獲取掃描儀數據


WIA(Windows Image Acquire,最新版本2.0)是Windows中一組從設備中捕獲圖像的標准API集合,它可以從設備(例如掃描儀、數碼相機)中獲取靜態圖像,以及管理這些設備。它既是API,又是DDI(Device Driver Interface)。因此,只要是滿足這個規范的設備,都能夠利用WIA直接和應用程序交互,而不是通過驅動。WIA甚至提供了統一的對話框來獲取圖片。

WIA是基於Com的,有兩種使用方式:

  1. c++:使用WIA自定義接口
  2. 其他:使用WIAAL(WIA Automation Layer)。

注:在Windows XP sp1以前的版本,WIAAL還不存在,因此第二種方式用的是WIA Scripting Model。

在.Net中使用WIA,我們用的是第二種方法。接下來做一個簡單的圖像掃描程序:

界面

新建一個WinForm應用程序,在上面添加一個按鈕和一個圖片框,點擊按鈕時啟動掃描進程,然后在圖片框中顯示圖像,應用程序界面如下:

使用WIA

Visual Studio 2010有一個好處,可以自動裝配Com組件,在工程中添加一個WIA的COM引用:

點擊確定后,會在工程引用中添加一個WIA.Interop.dll的文件,可以在對象瀏覽器中查看它:

打開掃描對話框

接下來可以利用WIA來進行掃描了,步驟很簡單,首先引用命名空間:

using WIA;

接下來,在button的Click事件中,添加如下代碼:

ImageFile imageFile = null;
CommonDialogClass cdc = new WIA.CommonDialogClass();

try
{
    imageFile = cdc.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType,
                                     WIA.WiaImageIntent.TextIntent,
                                     WIA.WiaImageBias.MaximizeQuality,
                                     "{00000000-0000-0000-0000-000000000000}",
                                     true,
                                     true,
                                     false);
}
catch (System.Runtime.InteropServices.COMException)
{
    imageFile = null;
}

WIA會自動彈出標准掃描對話框,進行掃描操作:

獲取圖像

調用ShowAcquireImage后,掃描后的數據就保存在ImageFile對象里了。用以下方法讀取ImageFile中的數據(該方法很傻很傻……很傻)

if (imageFile != null)
{

    imageFile.SaveFile(@"c:\1.bmp");
    using (FileStream stream = new FileStream(@"c:\1.bmp", FileMode.Open,
        FileAccess.Read, FileShare.Read))
    {
        pictureBox1.Image = Image.FromStream(stream);
    }    File.Delete(@"c:\1.bmp");
}

結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM