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 = 90;ip.Filters.Add(ip.FilterInfos.get_Item(ref filterName).FilterID, 0);ip.Filters[1].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, 0, 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获取扫描仪数据(利用Filter处理图片)

    WIA Automation Layer不仅能从设备中捕获照片,还能进行简单的处理.当WIA Automation Layer从设备中捕获照片,保存为一个ImageFile对象,我们可以通过访问该Im ...

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

    在C#中使用WIA获取扫描仪数据(一) WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪.数码相机) ...

  3. (转) 在C#中使用WIA获取扫描仪数据(三、利用Filter处理图片)

    <script type="text/javascript"></script> <script type="text/javascript ...

  4. 在微信菜单中采用重定向获取用户数据

     C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据 我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操 ...

  5. python通过api获取数据_在一次点击PythonRequests中从API获取所有数据

    import requests url = 'http://www.justdial.com/autosuggest.php?' param = { 'cases':'popular', 'strtl ...

  6. spring中jso文件获取后台数据时注意的点

    在jsp文件的script将后台的数据拼写并展示到页面 var tr = '<tr><td>' + s.baby_id + '</td>';tr += '<t ...

  7. php中使用表格美化显示数据,怎么利用layui美化table数据表格

    首先我们来看下美化后的效果图: (学习视频分享:html视频教程) 具体步骤: 1.引入layui的css和js文件 2.在页面放置一个table元素 3.通过 table.render() 方法指定 ...

  8. [分享] VBA中使用WIA处理本地图像

    一.WIA简介       (一)关于WIA       WIA是Windows Image Acquisition 的简称,它是 Windows Millennium Edition (Window ...

  9. Python获取股票数据并绘制相应K线图,看这个就够了!

    Python对股票的K线可视化 前言 说明 注意 数据获取 Tushare获取股票数据 获取医疗器械板块数据(代码部分) 获取股票数据(代码部分) 数据预处理 变量中文化(代码部分) K线绘制 代码部 ...

最新文章

  1. Google最新论文:大规模深度推荐模型的特征嵌入问题有解了!
  2. cpu子系统(优化)
  3. Android程序员的技术要求和学习路线
  4. python中的简单while循环及逻辑运算符
  5. 2021.01.30 Visual QA论文阅读
  6. 【转】x.509证书在WCF中的应用(CS篇)
  7. linux系统硬盘数量,Linux ext4文件系统划分磁盘inode数量
  8. leetcode刷题正则表达式
  9. Windows Phone开发(12):认识一下独具个性的磁贴
  10. 二叉树的镜像(剑指 Offer 27)
  11. Keymob移动网盟与芒果移动网盟的对比
  12. 暗黑版微信,官方发布! (附下载链接)
  13. 字节跳动21届秋招工资单曝光
  14. 2022 极术通讯-安谋科技“星辰”STAR-MC2处理器初探
  15. 计算机游戏软件使用说明书,虚贝游戏上号器怎么用 使用方法详解
  16. 第五章 课后习题(P139-140)
  17. Android篇 --Notification(消息通知)
  18. 第13期微生物组-宏基因组分析(线上/线下同时开课,2021.11)
  19. 软件需求评审会到底做什么?
  20. html怎么引用php文件,html页面怎么跟php文件连接

热门文章

  1. Contest20140709 testA 树型DP
  2. 对于连接Excel时“外部表不是预期的格式”错误的处理
  3. JAVA学习笔记JEECG BOOT介绍
  4. 游戏性能优化指南:如何将HTML5性能发挥到极致
  5. 新一代网络技术与课程建设师资培训感悟
  6. linux保存压缩程序输出,Linux压缩zip文件
  7. FileWriter学习
  8. ANTHILL 自动化构建
  9. C语言函数递归—经典递归问题
  10. error LNK2001的解决方法