C# 为什么可以';你没看见我的扫描仪吗?
我正试图用它在VS2008中构建一个C#3.5 WinForms应用程序,运行在Vista平台上,从扫描仪中获取图像 我知道有很多SDK都能做到这一点(Accusoft、ByteScout、Knowledge Lake等),但我们希望对UI进行一些控制(或缺乏),并能够自定义图像的处理和处理,这就是我们尝试WIA角度的原因 然而,我一直无法让WIA“看到”我的扫描仪 “Microsoft Windows Image Acquisition Library v2.0”dll已在VS项目中引用,我已包括“使用WIA;”在页面的顶部 以下是代码部分:C# 为什么可以';你没看见我的扫描仪吗?,c#,winforms,wia,image-scanner,C#,Winforms,Wia,Image Scanner,我正试图用它在VS2008中构建一个C#3.5 WinForms应用程序,运行在Vista平台上,从扫描仪中获取图像 我知道有很多SDK都能做到这一点(Accusoft、ByteScout、Knowledge Lake等),但我们希望对UI进行一些控制(或缺乏),并能够自定义图像的处理和处理,这就是我们尝试WIA角度的原因 然而,我一直无法让WIA“看到”我的扫描仪 “Microsoft Windows Image Acquisition Library v2.0”dll已在VS项目中引用,我已
//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,明基5250C),但问题相同 更新2:
我一直无法找到这方面的确切证据,但我认为我一直在测试的扫描仪,或者可能是大多数扫描仪:(,不兼容/不支持WIA。我现在正在研究使用TWAIN,但仍然希望听到任何人在WIA方面取得了一些成功 更新3:
最终放弃WIA并使用.NET Twain SDK(EZTwain)。现在全部排序。感谢大家的投入。请看一看这篇关于CodeProject的文章。这可能会在这方面对您有所帮助。此外,这里还有另一篇关于的文章,尽管它有点旧,但值得一看。仅连接扫描仪时,我会尝试以下代码
IDeviceManager dm = ClassFactory.createDeviceManager();
System.out.println(dm.deviceInfos().count());
如果设备管理器可以看到您的扫描仪,这是我测试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
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;
}
作为替代方案。最有可能的是,没有为设备安装WIA驱动程序。我建议您应该使用TWAIN,这几乎是所有供应商都支持的
有相当多的开放源代码和商业上的两个包装器。如果你需要同时支持<强> 64位和32位< /强> WiFraseWPF应用程序,你可以考虑使用Apple。
< P>我认为你的扫描仪不支持<代码> WIA/代码>。我建议使用大多数厂商支持的TWAIN。 我建议使用NTWAIN库: 努吉·帕克凯奇: 源代码:@Mitch。是的,检查过了。我已经确定它是当前版本的驱动程序。它在photoshop中工作没有问题。可能是Hi Tommie的副本,我在研究这一点的过程中看到了这两个页面(并使用了其中的代码)但是,Twain的文章是2001年的,甚至提到WIA是一种更现代的方法。而WIA的文章是针对WIA 1.0的,仅适用于XP,我使用的是针对Vista/Win7的WIA 2.0。不过还是要谢谢你。
ICommonDialog dialog = new CommonDialog();
Device device = dialog.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, true, false);