在C#中使用WIA获取扫描仪数据(一)

WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪、数码相机)中获取静态图像,以及管理这些设备。它既是API,又是DDI(Device Driver Interface)。因此,只要是满足这个规范的设备,都能够利用WIA直接和应用程序交互,而不是通过驱动。WIA甚至提供了统一的对话框来获取图片。

WIA是基于Com的,有两种使用方式:

  1. c++:使用WIA自定义接口
  2. 其他:使用WIAAL(WIA Automation Layer)。

注:在Windows XP sp1以前的版本,WIAAL还不存在,因此第二种方式用的是WIA Scripting Model。

在.Net中使用WIA,我们用的是第二种方法。接下来做一个简单的图像扫描程序:

界面

新建一个WinForm应用程序,在上面添加一个按钮和一个图片框,点击按钮时启动扫描进程,然后在图片框中显示图像,应用程序界面如下:

 

使用WIA

Visual Studio 2008有一个好处,可以自动装配Com组件,在工程中添加一个WIA的COM引用:

 点击确定后,会在工程引用中添加一个WIA.Interop.dll的文件,可以在对象浏览器中查看它:

在C#中使用WIA获取扫描仪数据(一)_第1张图片

打开扫描对话框

接下来可以利用WIA来进行扫描了,步骤很简单,首先引用命名空间:

using WIA;

接下来,在button的Click事件中,添加如下代码:

ImageFile imageFile nullCommonDialogClass cdc new WIA.CommonDialogClass(); try {imageFile cdc.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType,WIA.WiaImageIntent.TextIntentWIA.WiaImageBias.MaximizeQuality"{00000000-0000-0000-0000-000000000000}"truetruefalse); } catch (System.Runtime.InteropServices.COMException) {imageFile null; }

WIA会自动弹出标准扫描对话框,进行扫描操作:

在C#中使用WIA获取扫描仪数据(一)_第2张图片

获取图像

调用ShowAcquireImage后,扫描后的数据就保存在ImageFile对象里了。用以下方法读取ImageFile中的数据(该方法很傻很傻……很傻)

if (imageFile != null) { imageFile.SaveFile(@"c:/1.bmp"); using (FileStream stream newFileStream(@"c:/1.bmp"FileMode.OpenFileAccess.ReadFileShare.Read)) { pictureBox1.ImageImage.FromStream(stream); } File.Delete(@"c:/1.bmp"); }

结果如下:

在C#中使用WIA获取扫描仪数据(一)_第3张图片


你可能感兴趣的:(在C#中使用WIA获取扫描仪数据(一))