WIA Automation Layer不仅能从设备中捕获照片,还能进行简单的处理。当WIA Automation Layer从设备中捕获照片,保存为一个ImageFile对象,我们可以通过访问该ImageFile对象来访问照片的属性。然而,为了保护原来的照片,不能直接通过修改该ImageFile对象的方法修改图片。代替的方法是,使用ImageProcess和一个或多个Filter对象创建一个副本,修改图片。

代码

以下代码把扫描得到的图片顺时针旋转90度:

  1. if (imageFile != null)
  2. {
  3.  
  4. ImageProcess ip = new ImageProcessClass();
  5.  
  6. object filterName="RotateFlip";
  7. Object propertyName = "RotationAngle";
  8. Object propertyValue = ;
  9.  
  10. ip.Filters.Add(ip.FilterInfos.get_Item(ref filterName).FilterID, );
  11. ip.Filters[].Properties.get_Item(ref propertyName).set_Value(ref propertyValue);
  12.  
  13. var buffer =ip.Apply(imageFile).FileData.get_BinaryData() as byte[];
  14. using (MemoryStream ms = new MemoryStream())
  15. {
  16. ms.Write(buffer, , buffer.Length);
  17. pictureBox1.Image = Image.FromStream(ms);
  18. }
  19.  
  20. }

FilterID

以下是可用的FilterID

RotateFlip

  1. 90 度增量旋转,以及水平或垂直翻转。
  2. RotationAngle - 如果希望旋转,可将 RotationAngle 属性设置为 90180 270
  3. 否则设置为 0 [默认值]
  4. FlipHorizontal - 如果希望水平翻转图像,可将 FlipHorizontal 属性设置为 True
  5. 否则设置为 False [默认值]
  6. FlipVertical - 如果希望垂直翻转图像,可将 FlipVertical 属性设置为 True
  7. 否则设置为 False [默认值]
  8. FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,
  9. 可将 FrameIndex 属性设置为帧的索引,
  10. 否则设置为 0 [默认值]

Crop

  1. 以指定的左、右、上、下边距裁剪图像。
  2. Left - 如果希望沿左侧裁剪,可将 Left 属性设置为左边距(单位为像素),
  3. 否则设置为 0 [默认值]
  4. Top - 如果希望沿顶部裁剪,可将 Top 属性设置为上边距(单位为像素),
  5. 否则设置为 0 [默认值]
  6. Right - 如果希望沿右侧裁剪,可将 Right 属性设置为右边距(单位为像素),
  7. 否则设置为 0 [默认值]
  8. Bottom - 如果希望沿底部裁剪,可将 Bottom 属性设置为下边距(单位为像素),
  9. 否则设置为 0 [默认值]
  10. FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,
  11. 可将 FrameIndex 属性设置为帧的索引,否则设置为 0 [默认值]

Scale

  1. 将图像缩放到指定的最大宽度和最大高度,如有必要,保留纵横比。
  2. MaximumWidth - MaximumWidth 属性设置为希望将图像缩放到的宽度(单位为像素)。
  3. MaximumHeight - MaximumHeight 属性设置为希望将图像缩放到的高度(单位为像素)。
  4. PreserveAspectRatio - 如果希望保持图像当前的纵横比,可将 PreserveAspectRatio 属性设置为 True [默认值],
  5. 否则设置为 False,图像将被拉伸到MaximumWidth MaximumHeight
  6. FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,可将 FrameIndex 属性设置为帧的索引,
  7. 否则设置为 0 [默认值]

Stamp

  1. 在指定的 Left Top 坐标处标记指定的 ImageFile
  2. ImageFile - ImageFile 属性设置为希望标记的 ImageFile 对象
  3. Left - Left 属性设置为希望将 ImageFile 标记到的从左侧开始的偏移(单位为像素)[默认值为 0]
  4. Top - Top 属性设置为希望将 ImageFile 标记到的从顶部开始的偏移(单位为像素)[默认值为 0]
  5. FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,可将 FrameIndex 属性设置为帧的索引,否则设置为0[默认值]

Exif

  1. 添加/删除指定的 Exif 属性。
  2. Remove - 如果希望删除指定的 Exif 属性,可将 Remove 属性设置为 True,否则设置为 False [默认值]以添加
  3. 指定的 exif 属性
  4. ID - ID 属性设置为希望添加或删除的 PropertyID
  5. Type - 设置 Type 属性以指示希望添加的 Exif 属性的 WiaImagePropertyType(对于删除则忽略)
  6. Value - Value 属性设置为希望添加的 Exif 属性的值(对于删除则忽略)
  7. FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,可将 FrameIndex 属性设置为帧的索引,否则设置为0[默认值]

Frame

  1. Remove - 如果希望删除指定的 FrameIndex,可将 Remove 属性设置为 True
  2. 否则设置为 False [默认值]以在指定的 FrameIndex 之前插入 ImageFile
  3. ImageFile - ImageFile 属性设置为希望添加其 ActiveFrame ImageFile 对象(对于删除则忽略)
  4. FrameIndex - 对于删除,将 FrameIndex 属性设置为希望删除的帧的索引,
  5. 对于添加,将 FrameIndex 设置为要在其之前插入ImageFile 的帧的索引,否则设置为 0 [默认值]
  6. 以从指定的 ImageFile 追加帧

ARGB

  1. ARGBData - ARGBData 属性设置为表示指定 FrameIndex ARGB 数据的 Longs 的矢量(宽度和高度必须匹配)
  2. FrameIndex - FrameIndex 属性设置为希望修改其 ARGB 数据的帧的索引,否则设置为0[默认值]以修改ActiveFrame

Convert

  1. 将得到的 ImageFile 转换为指定的类型。
  2. FormatID - FormatID 属性设置为所需支持的光栅图像格式,当前可选择的格式有 wiaFormatBMP
  3. wiaFormatPNGwiaFormatGIFwiaFormatJPEG wiaFormatTIFF
  4. Quality - 对于 JPEG 文件,可将 Quality 属性设置为从 1 100 [默认值]之间的任何值,以指定 JPEG 压缩的质量
  5. Compression - 对于 TIFF 文件,可将 Compression 属性设置为 CCITT3CCITT4RLE Uncompressed 以指定压缩方案,
  6. 否则可设置为 LZW [默认值]

小节

总的来说,在c#中利用Automation Layer中的Filter非常麻烦(要写一堆Object),这些简单的图像处理操作还不如用GDI+来实现。

在C#中使用WIA获取扫描仪数据(利用Filter处理图片)的更多相关文章

  1. 在C#中使用WIA获取扫描仪数据

    WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪.数码相机)中获取静态图像,以及管理这些设备.它既是 ...

  2. C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

    我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...

  3. asp.net三层架构 及其中使用泛型获取实体数据介绍

    asp.net中使用泛型获取实体数据可以发挥更高的效率,代码简洁方便,本例采用三层架构.首先在model层中定义StuInfo实体,然后在 DAL层的SQLHelper数据操作类中定义list< ...

  4. Oracle中使用游标获取指定数据表的所有字段名对应的字符串

    操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...

  5. js中把ajax获取的数据转化成树状结构(并做成多级联动效果)

    1.首先通过ajax获取数据,此处省略,直接贴出获取到的数据格式 var arr = [{ id: 1, name: "一级标题", pid: 0 }, { id: 2, name ...

  6. Asp.net Mvc中分部视图获取后台数据并展示

    方式一: 1.主页面中代码: @{Html.RenderAction("CreateLeftMenu");} 2.Controller中代码: public PartialView ...

  7. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...

  8. 随机获取数据库中的某一条数据(基于yii2框架开发)

    注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...

  9. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

随机推荐

  1. C#DbHelperMySQL数据库帮助类 (转载)

    主要功能如下数据访问抽象基础类 主要是访问Mysql数据库主要实现如下功能 .得到最大值 .是否存在 .是否存在(基于MySqlParameter) .执行SQL语句,返回影响的记录数 .执行MySq ...

  2. vc调用BCB的dll 参数传递 报错

    可能原因: 调用方式约定不一致. 函数调用约定如下: 1. __cdecl:C 和 C++ 程序的缺省调用规范. 2. __stdcall:标准调用约定(即WINAPI调用约定),也就是pascal调 ...

  3. mysql的sql分页函数limit使用

    My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M, ...

  4. andriod 中设置sdk升级代理服务器

    Android SDK 在线更新镜像服务器资源: 大连东软信息学院镜像服务器地址: http://mirrors.neusoft.edu.cn 端口:80 北京化工大学镜像服务器地址: IPv4: h ...

  5. BFC探秘

    今天面试被问到了BFC,听到这个缩略词我是懵比的,啥东西?还是太年轻太简单啊.于是面试结束之后搜了几篇博客看了下,看完有一种豁然开朗的感觉,一些之前未能理解的CSS元素行为也知其所以然了.顺便说一下, ...

  6. EDM推送

    一.需求描述:        日前,做了一个发送客户账单的功能,邮件模板采用自定义,生成vm文件,保存至redis,    采用jodd-mail发送邮件,查询用户账单数据,账单明细,缓存加载模板并渲 ...

  7. python学习笔记--随时更新

    # coding=GBK score = 90 if score >= 80: print("好") elif score >= 60: print("及格& ...

  8. 将requirejs进行到底(2)

    前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...

  9. 日期-用Datapicker实现前一天后一天

    运用了JQuery UI Datepicker 插件和一些常用日期的方法.其中Datepicker的API具体可参考[http://api.jqueryui.com/datepicker/#optio ...

  10. PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA']

    PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA'] 最近用微信api写接口时用到了这个,记录,下面转载开始: —————————— 这是手册里写的 总是产生变量包含有原始的 P ...