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



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

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

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

在我工作的地方,我们围绕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:TempWIA." + 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)TWAIN

它是一个API,"调节软件和数字成像设备之间的通信"并在LGPL许可下运行,参见维基百科请参阅主页

2)Windows图像采集

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

参见维基百科请参阅主页

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

它为.NET应用程序提供了完整的SDK,因此可能是对您最有用的,但它是付费解决方案,参见维基百科请参阅主页

4)自己动手

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

最新更新