我正在尝试使用 WIA(Microsoft Windows Image Acquisition Library v2.0) 来构建一个在Vista系统上运行的C# 3.5 WinForms应用程序,在VS2008中从扫描仪获取图像。
我知道有很多SDK可以完成这个任务(如Accusoft、ByteScout、Knowledge Lake等),但我们想要控制UI(或缺少UI)并能够自定义处理和处理图像,这就是为什么我们选择WIA的原因。
然而,我一直无法让WIA“看到”我的扫描仪。
在VS项目中引用了“Microsoft Windows Image Acquisition Library v2.0” dll,并在页面顶部包含了“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;
}
代码编译没问题,但是运行时第二行 (Device d = ...) 抛出以下错误:
Exception from HRESULT: 0x80210015
根据我的理解,这通常意味着你的设备未插好/未开启或该设备不支持 WIA。
但是所涉及的扫描仪在控制面板/扫描仪和相机中显示(表示它支持 WIA),并且在通过 Photoshop 访问时起作用(表示它已经开启)。
我已经插入其他设备(数码单反相机),以上代码可以“看到”它们,因此代码是有效的。
有没有人能提供关于出现问题原因和如何修复它的建议?
更新1:
我尝试了几个不同的扫描仪(Canon 5000F、Benq 5250C),但问题依旧。
更新2:
我一直无法找到确凿的证据,但我认为我测试过的扫描仪,或者也许是大多数扫描仪 :( ,都不支持 WIA。我现在正在考虑使用 TWAIN,但仍然希望听取任何曾经成功使用 WIA 的人的建议。
更新3:
最终放弃了 WIA 并使用了 .NET Twain SDK (EZTwain)。现在一切都解决了。感谢大家的帮助。