2014-02-18 27 views
4

我正在研究应用程序,其中我的应用程序需要以图像格式从扫描仪获取输入。从连接到USB端口或串行端口的扫描仪获取输入.net

这是一个wpf应用程序,扫描仪连接到系统,用户将文档放入扫描仪并在应用程序中打印按钮以扫描文档,然后应用程序必须将扫描的文档保存为系统中的图像。

我不想使用任何付费组件,我相信必须有一些内置的方式来从端口读取输入。

+0

检出http:// stackoverflow。com/questions/8925763/wia-scanning-in-a-wpf-application – Rachel

回答

4

我在哪里工作,我们为Windows图像采集编写了一个自定义包装。这是一个非常简单的例子,应该从用户选择的扫描仪中捕获它。

//Reference "Windows Image Acquisition Library v2.0" on the COM tab. 

private void Button1_Click(object sender, EventArgs e) 
{ 
    var dialog = new WIA.CommonDialog(); 
    var file = dialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType); 
    file.SaveFile("C:\Temp\WIA." + file.FileExtension); 
} 

如果你想这样做,而不显示任何对话框,这里有整齐地举办了名为WIAScanner一类的静态函数的一些代码真棒文章:http://miljenkobarbir.com/using-a-scanner-without-dialogs-in-net/

从物品使用的代码,假设你有一台扫描仪,并希望只使用一个,或者你只是想使用该系统第一台扫描仪,你可以这样做:

private void Button1_Click(object sender, EventArgs e) 
{ 
    var scannerIds = WIAScanner.GetDevices(); 

    if(scannerIds.Count > 0) { 
     var images = WIAScanner.Scan(scannerIds[0]); 

     //Process the images here. 
    } 
} 

我希望这有助于。

+0

它的工作原理。谢谢。但还有一件事是我想要的,那就是用一些我不想要的对话框来提示。选择扫描仪并选择图像类型等。我如何从代码中设置它。 – MegaMind

+0

添加了关于如何在没有对话框的情况下进行文章链接。它非常优雅和可重用的代码。 –

+0

我清理了我的回应,使其更适用于普通观众以及您的问题。 –

0

您acctually有几个选项:

1)TWAIN

这是一个API下LGPL许可证是 “调节软件和数字成像设备之间的通信” 并运行, 看到WikipediaHomepage

2)Windows图像采集

这是微软专有的。 “WIA平台使成像/图形应用程序能够与成像硬件交互,并标准化不同应用程序和扫描仪之间的交互。”

看到Wikipedia 看到Homepage

3)图像和扫描仪接口规范(ISIS)

它提供了一个完整的SDK用于.NET应用程序,所以可能是最有用的一个给你,但支付解决方案, 看到Wikipedia 看到Homepage

4)做你自己

如果您想自己创建通信层,则必须确保至少该设备具有有效的USB驱动程序。要访问任何硬件,您必须引入非托管代码(即C++),因为大多数这些设备驱动程序都提供了C++ API,这意味着要为基本的IO操作创建一个库,然后为您的应用程序创建一个c#封装器。