【问题标题】:Get input from a scanner connected to USB port or Serial Port in .net从连接到 USB 端口或 .net 中的串行端口的扫描仪获取输入
【发布时间】:2014-03-18 01:38:16
【问题描述】:

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

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

我不想使用任何付费组件,我相信一定有某种内置方式可以从端口读取输入。

【问题讨论】:

标签: c# .net usb image-scanner


【解决方案1】:

在我工作的地方,我们围绕 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.
    }
}

我希望这会有所帮助。

【讨论】:

  • 它有效。谢谢。但我还想要一件事,它提示了一些我不想要的对话框。选择扫描仪并选择图像类型等。我如何从代码中设置它。
  • 添加了一篇关于如何在没有对话框的情况下执行此操作的文章链接。它的代码非常优雅且可重用。
  • 我稍微整理了一下我的回答,使其更适用于一般观众以及您的问题。
【解决方案2】:

其实你有几个选择:

1) TWAIN

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

2) Windows 图像采集

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

见Wikipedia 见Homepage

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

它为 .NET 应用程序提供了完整的 SDK,因此可能对您最有帮助,但它是付费解决方案, 见Wikipedia 见Homepage

4) 自己动手

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多