Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';你没看见我的扫描仪吗?_C#_Winforms_Wia_Image Scanner - Fatal编程技术网

C# 为什么可以';你没看见我的扫描仪吗?

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项目中引用,我已

我正试图用它在VS2008中构建一个C#3.5 WinForms应用程序,运行在Vista平台上,从扫描仪中获取图像

我知道有很多SDK都能做到这一点(Accusoft、ByteScout、Knowledge Lake等),但我们希望对UI进行一些控制(或缺乏),并能够自定义图像的处理和处理,这就是我们尝试WIA角度的原因

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

“Microsoft Windows Image Acquisition Library v2.0”dll已在VS项目中引用,我已包括“使用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,明基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);