从连接到USB端口的扫描仪或.net中的串行端口获取输入

时间:2014-02-18 10:48:15

标签: c# .net usb image-scanner

我正在开发一个应用程序,我的应用程序需要以图像格式从扫描仪获取输入。

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

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

2 个答案:

答案 0 :(得分:4)

在我工作的地方,我们围绕Windows Image Acquisition编写了一个自定义包装器。这是一个非常简单的示例,应该从用户选择的扫描仪中捕获它。

 //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.
    }
}

我希望这会有所帮助。

答案 1 :(得分:0)

您实际上有几个选择:

1) TWAIN

这是一个“调节软件和数字成像设备之间通信”的API,并在LGPL许可下运行,  见Wikipedia  见Homepage

2) Windows Imaging Acquisition

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

Wikipedia  见Homepage

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

为.NET应用程序提供了完整的SDK,所以对您来说可能是最有帮助的,但是付费解决方案, 见WikipediaHomepage

4)自己动手

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