代码之家  ›  专栏  ›  技术社区  ›  Dhaust

为什么WIA看不到我的扫描仪?

  •  25
  • Dhaust  · 技术社区  · 15 年前

    WIA (Microsoft Windows Image Acquisition Library v2.0) 在VS2008中构建一个运行在Vista平台上的C#3.5winforms应用程序,从扫描仪获取图像。

    然而,我一直无法让WIA“看到”我的扫描仪。

    “Microsoft Windows Image Acquisition Library v2.0”dll已在VS项目中引用,我在页面顶部包含了“using 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;
    }
    

    设备d=。。。 )运行时引发以下错误:
    HRESULT异常:0x80210015

    据我所知,这通常意味着你的设备被拔下/没有打开,或者设备与WIA不兼容。

    我插入了其他设备(数码单反),上面的代码可以“看到”它们,所以代码正在工作。

    更新1 :
    我试过几种不同的扫描仪(佳能5000F,明基5250C),但问题是一样的。


    我一直找不到确凿的证据,但我想我一直在测试的扫描仪,或者

    更新3

    7 回复  |  直到 8 年前
        1
  •  2
  •   Ali Bahrami    8 年前

    WIA . 我建议使用大多数供应商都支持的TWAIN。

    我建议使用 恩特温 图书馆:

    努吉特·帕克奇: https://www.nuget.org/packages/NTwain/

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

        2
  •  0
  •   t0mm13b    15 年前

    看看这篇关于CodeProject的文章 TWAIN . 这可能有助于你在这个方向上,还有一篇关于 WIA

        3
  •  0
  •   Zavael    14 年前

    当只连接扫描仪时,我会尝试以下代码

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

    如果设备管理器能看到你的扫描仪

        4
  •  0
  •   mbinette    12 年前
    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
    
        5
  •  0
  •   shA.t Rami Jamleh    10 年前
    ICommonDialog dialog = new CommonDialog();
    Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);
    

    作为一种选择。

        6
  •  0
  •   Rey    8 年前

    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;
    }
    
        7
  •  0
  •   Scanner.js Receipt Invoice OCR    8 年前

    很可能,这些设备没有安装WIA驱动程序。我建议您改用TWAIN,几乎所有的供应商都支持它。

    有相当多的开源以及商业化的TWAIN包装。 Most of them work for 32bit applications and 64bit applications fail to access 32bit TWAIN drivers 64位和32位 WinForms WPF应用程序,可以考虑使用Asprise C# VB.NET scanning for twain wia scanner .