25

我正在尝试使用WIA(Microsoft Windows Image Acquisition Library v2.0)在 Vista 钻机上运行的 VS2008 中构建 C# 3.5 WinForms 应用程序,以从扫描仪获取图像。

我知道有很多 SDK 可以做到这一点(Accusoft、ByteScout、Knowledge Lake 等),但我们希望对 UI 进行一些控制(或缺乏)以及自定义图像处理和处理的能力,即为什么我们要尝试 WIA 角度。

但是,我一直无法让 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;
}

符合要求,但第 2 行(设备 d = ...)在运行时引发以下错误:
HRESULT 异常:0x80210015

据我所知,这通常意味着您的设备已拔出/未打开,或者设备与 WIA 不兼容。
但是有问题的扫描仪显示在控制面板/扫描仪和相机中(意味着它与 WIA 兼容)并且在通过 Photoshop 访问时工作(意味着它已打开)。

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

有没有人对出了什么问题以及如何解决它有任何建议?

更新 1
我尝试了几种不同的扫描仪(佳能 5000F、Benq 5250C),但同样的问题。

更新 2
我一直无法找到明确的证据,但我认为我一直在测试的扫描仪,或者大多数扫描仪 :( 不兼容/支持 WIA。我现在正在考虑使用TWAIN,但仍然希望听到任何在 WIA 方面取得成功的人。

更新 3:最终放弃 WIA 并使用 .NET Twain SDK (EZTwain)。现在都整理好了。感谢大家的意见。

4

7 回答 7

2

我认为您的扫描仪不支持WIA. 我建议使用大多数供应商都支持的 TWAIN。

我建议使用NTWAIN库:

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

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

于 2016-11-24T15:16:06.067 回答
0

仅连接您的扫描仪时,我会尝试以下代码

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

如果设备管理器完全可以看到您的扫描仪

于 2010-09-09T13:06:23.143 回答
0

这是我测试 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;
}
于 2012-01-14T10:45:40.523 回答
0

查看涵盖TWAIN的 CodeProject 上的这篇文章。这可能会对您有所帮助,此外,这是另一篇关于WIA的文章,尽管它有点旧,但仍然值得一看。

于 2010-03-10T01:50:45.680 回答
0
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
于 2011-04-02T06:21:15.090 回答
0
ICommonDialog dialog = new CommonDialog();
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);

作为备选。

于 2015-03-14T14:26:20.120 回答
0

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

有相当多的开源和商业 TWAIN 包装器。它们中的大多数适用于 32 位应用程序,而 64 位应用程序无法访问 32 位 TWAIN 驱动程序。如果您需要同时支持64 位和 32 位WinForms WPF 应用程序,您可以考虑使用 Asprise C# VB.NET 扫描 twain wia 扫描仪

于 2016-08-25T04:38:05.800 回答