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

代码

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

if (imageFile != null)
{ ImageProcess ip = new ImageProcessClass(); object filterName="RotateFlip";
Object propertyName = "RotationAngle";
Object propertyValue = ; ip.Filters.Add(ip.FilterInfos.get_Item(ref filterName).FilterID, );
ip.Filters[].Properties.get_Item(ref propertyName).set_Value(ref propertyValue); var buffer =ip.Apply(imageFile).FileData.get_BinaryData() as byte[];
using (MemoryStream ms = new MemoryStream())
{
ms.Write(buffer, , buffer.Length);
pictureBox1.Image = Image.FromStream(ms);
} }

FilterID

以下是可用的FilterID

RotateFlip

以 90 度增量旋转,以及水平或垂直翻转。
RotationAngle - 如果希望旋转,可将 RotationAngle 属性设置为 90、180 或 270,
否则设置为 0 [默认值]
FlipHorizontal - 如果希望水平翻转图像,可将 FlipHorizontal 属性设置为 True,
否则设置为 False [默认值]
FlipVertical - 如果希望垂直翻转图像,可将 FlipVertical 属性设置为 True,
否则设置为 False [默认值]
FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,
可将 FrameIndex 属性设置为帧的索引,
否则设置为 0 [默认值]

Crop

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

Scale

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

Stamp

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

Exif

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

Frame

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

ARGB

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

Convert

将得到的 ImageFile 转换为指定的类型。
FormatID - 将 FormatID 属性设置为所需支持的光栅图像格式,当前可选择的格式有 wiaFormatBMP、
wiaFormatPNG、wiaFormatGIF、wiaFormatJPEG 或 wiaFormatTIFF
Quality - 对于 JPEG 文件,可将 Quality 属性设置为从 1 到100 [默认值]之间的任何值,以指定 JPEG 压缩的质量
Compression - 对于 TIFF 文件,可将 Compression 属性设置为 CCITT3、CCITT4、RLE 或 Uncompressed 以指定压缩方案,
否则可设置为 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. Access获取新插入数据的自增长主键Id

    sqlserver有output,Oracle有Sequence.Access用下面的方法: public int InsertEx(User user) { ; using (OleDbConnec ...

  2. ASP.NET MVC——Controller的激活

    Controller的激活是根据在路由过程得到的Controller名称来创建对应的Controller对象.相关类如图: Controller激活的过程可通过如下序列图表示: 代码示例如下: str ...

  3. HTML中的API

    在程序语言里面就使用API这个行为来讲,可拆解为两个操作:取得API接口和运行API功能 例如:书本具有传授知识的功能,这里就好比一个API,学生拿出某个课本学习,就相当于取得API,学习通过课本学习 ...

  4. Java 中文件下载的几种应用

    public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的 ...

  5. jquery动态插入行,不用拼写html,简洁版

    这个一个利用jquery实现动态插入输入行效果小功能,不用在javascript里拼写html字符串,更简洁.高效. html代码: <div class="fitem"&g ...

  6. Fatal error: Uncaught SoapFault exception

    Warning: SoapClient::SoapClient() expects parameter 2 to be array, boolean given in  login\login.php ...

  7. 速卖通api--获取商品信息

    <? $productId    = 'xxxx';//你的产品id    $access_token = 'xxxxx';//你的授权码    $appSecret    = 'xxxx';/ ...

  8. 网站访问架构cdn与负载均衡

    曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需 要从无数个角度去考虑他,大到服务器的布局,小到软件中某个 ...

  9. WF学习笔记(四)

    1.使用WorkflowApplication.OnUnhandledException 处理Code异常 ,用于产生异常的Activity: public class ExceptionActivi ...

  10. Rendering Transparent 3D Surfaces in WPF with C#(转载)

    Rendering Transparent 3D Surfaces in WPF with C# The primary problems that arise when rendering semi ...