我正在开发一个应用程序,我的应用程序需要以图像格式从扫描仪获取输入。
这是一个wpf应用程序,扫描仪连接到系统,用户将文档放入扫描仪并打印应用程序中的按钮以扫描文档,然后应用程序必须将扫描的文档保存为系统中的图像。 / p>
我不想使用任何付费组件,我相信必须有一些内置的方式来读取端口的输入。
答案 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平台使成像/图形应用程序能够与成像硬件交互,并标准化不同应用程序和扫描仪之间的交互。”
3)图像和扫描仪接口规范(ISIS)
为.NET应用程序提供了完整的SDK,所以对您来说可能是最有帮助的,但是付费解决方案, 见Wikipedia 见Homepage
4)自己动手
如果您想自己创建一个通信层,您必须至少确保该设备具有有效的USB驱动程序。要访问任何硬件,您必须引入非托管代码(即c ++),因为大多数设备驱动程序都提供c ++ API,这意味着为基本IO操作创建一个库,然后为您的应用程序创建一个c#包装器。