zoukankan      html  css  js  c++  java
  • 在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 2010有一个好处,可以自动装配Com组件,在工程中添加一个WIA的COM引用:

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

    打开扫描对话框

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

    using WIA;

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

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

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

    获取图像

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

    if (imageFile != null)
    {
    
        imageFile.SaveFile(@"c:1.bmp");
        using (FileStream stream = new FileStream(@"c:1.bmp", FileMode.Open,
            FileAccess.Read, FileShare.Read))
        {
            pictureBox1.Image = Image.FromStream(stream);
        }    File.Delete(@"c:1.bmp");
    }

    结果如下:

  • 相关阅读:
    POJ 3037 Skiing(Dijkstra)
    HDU 1875 畅通工程再续(kruskal)
    HDU 1233 还是畅通工程(Kruskal)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 754 到达终点数字(暴力+反向)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 753 破解保险箱(递归)
    Java实现 LeetCode 752 打开转盘锁(暴力)
  • 原文地址:https://www.cnblogs.com/hongmaju/p/4664262.html
Copyright © 2011-2022 走看看