簡體   English   中英

為什么WIA看不到我的掃描儀?

[英]Why can't WIA see my scanner?

我正在嘗試使用WIA(Microsoft Windows Image Acquisition Library v2.0)在Vista平台上運行的VS2008中構建一個C#3.5 WinForms應用程序,以從掃描儀中獲取圖像。

我知道有很多SDK可以做到這一點(Accusoft,ByteScout,Knowledge Lake等),但我們想要對UI(或缺乏)進行一些控制,並且能夠自定義圖像的處理和處理,這是為什么我們嘗試WIA角度。

但是,我無法讓WIA“看到”我的掃描儀。

VS項目中引用了“Microsoft Windows Image Acquisition Library v2.0”dll,我已經包含了“使用WIA”; 在頁面頂部。

這是代碼部分:

//Choose Scanner
CommonDialogClass class1 = new CommonDialogClass();
Device d = class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);
if (d != null)
{
    this.DeviceID = d.DeviceID;
}
else
{
    //no scanner chosen
    return;
}

符合條件,但第2行( 設備d = ... )在運行時踢出以下錯誤:
來自HRESULT的異常:0x80210015

據我所知,這通常意味着您的設備已拔下/未打開或設備不兼容WIA。
但是有問題的掃描儀出現在控制面板/掃描儀和相機中(意味着它與WIA兼容),並且在通過Photoshop訪問時工作(意味着它已打開)。

我已插入其他設備(數碼單反相機),上面的代碼可以“看到”它們,因此代碼正常工作。

有沒有人對什么是錯誤以及如何解決它有任何建議?

更新1
我嘗試了幾種不同的掃描儀(Canon 5000F,Benq 5250C),但同樣的問題。

更新2
我一直無法找到這方面的確切證據,但我認為我一直在測試的掃描儀,或者大多數掃描儀:(,不兼容/支持WIA。我現在正在考慮使用TWAIN,但是我仍然希望聽到任何與WIA取得成功的人。

更新3 :結束了放棄WIA並使用.NET Twain SDK(EZTwain)。 現在全部排序。 感謝大家的投入。

我認為您的掃描儀不支持WIA 我建議使用大多數供應商支持的TWAIN。

我建議使用NTWAIN庫:

Nuget Pakcage: https ://www.nuget.org/packages/NTwain/

源代碼: https//bitbucket.org/soukoku/ntwain

看看有關TWAIN的 CodeProject上的這篇文章。 這可能會幫助你朝這個方向發展,這也是另一篇關於WIA的文章,盡管它雖然有點老但值得一看。

ICommonDialog dialog = new CommonDialog();
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);

作為備選。

當僅連接掃描儀時,我會嘗試以下代碼

IDeviceManager dm = ClassFactory.createDeviceManager();
System.out.println(dm.deviceInfos().count());

如果設備管理員可以完全看到您的掃描儀

最有可能的是,沒有為設備安裝WIA驅動程序。 我建議您應該使用TWAIN,幾乎所有供應商都支持。

有很多開源以及商業TWAIN包裝。 其中大多數適用於32位應用程序,64位應用程序無法訪問32位TWAIN驅動程序 如果您需要同時支持64位和32位 WinForms WPF應用程序,您可以考慮使用Asprise C#VB.NET掃描twain wia掃描程序

wiaImage = wiaDiag.ShowAcquireImage(WiaDeviceType.ScannerDeviceType, WiaImageIntent.GrayscaleIntent, WiaImageBias.MaximizeQuality, wiaFormatJPEG, true, true, false);
WIA.Vector vector = wiaImage.FileData;
FileExtention = wiaImage.FileExtension;
Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
pbPreview1.Image = i;//to show preview of scanned image in picturebox

這是我測試WIA掃描儀的方法:

private bool WIAScannerTest() 
{
       try
       {
           WIA.CommonDialog wiaObj = New WIA.CommonDialog(); 
           WIA.Device wiaDev = 
                  wiaObj.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);
           return true;
       }
       catch (Exception ex)
       {}
       finally
       {
           if(wiaDev != null)
           {
               Marshal.ReleaseComObject(wiaDev)
               wiaDev = null;
           }
           if(wiaObj != null)
           {
              Marshal.ReleaseComObject(wiaObj)
              wiaObj = null;
           }
       }
       return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM