博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在C#中使用WIA获取扫描仪数据(利用Filter处理图片)
阅读量:6924 次
发布时间:2019-06-27

本文共 3667 字,大约阅读时间需要 12 分钟。

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 和 MaximumHeightFrameIndex          - 如果希望修改除 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 属性设置为希望添加或删除的 PropertyIDType       - 设置 Type 属性以指示希望添加的 Exif 属性的 WiaImagePropertyType(对于删除则忽略)Value      - 将 Value 属性设置为希望添加的 Exif 属性的值(对于删除则忽略)FrameIndex - 如果希望修改除 ActiveFrame 之外的帧,可将 FrameIndex 属性设置为帧的索引,否则设置为0[默认值]

 

Frame

Remove     - 如果希望删除指定的 FrameIndex,可将 Remove 属性设置为 True,               否则设置为 False [默认值]以在指定的 FrameIndex 之前插入 ImageFileImageFile  - 将 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 或 wiaFormatTIFFQuality     - 对于 JPEG 文件,可将 Quality 属性设置为从 1 到100 [默认值]之间的任何值,以指定 JPEG 压缩的质量Compression - 对于 TIFF 文件,可将 Compression 属性设置为 CCITT3、CCITT4、RLE 或 Uncompressed 以指定压缩方案,                否则可设置为 LZW [默认值]

小节

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

转载地址:http://bkcjl.baihongyu.com/

你可能感兴趣的文章
centos6.4安装配置lamp环境
查看>>
sql优化-查询语句使用“?”
查看>>
struts2 标签 验证和国际化
查看>>
10. JavaSE-子类实例化过程 & 构造方法间调用
查看>>
虚拟集群通过ip或mac查找虚拟机名称方法
查看>>
nacos作为配置中心
查看>>
Objective-C 对象复制(深复制/浅复制)
查看>>
keepalived+nginx实现nginx高可用
查看>>
OCR SDK开发者平台
查看>>
【SMTP简单邮件协议的服务配置】
查看>>
20145328 《Java程序设计》实验三实验报告
查看>>
uniq命令
查看>>
hdu5781 2016多校1001 ATM Machine
查看>>
我的管理日志--项目人力资源管理
查看>>
win7下安装hadoop 2.6.0 的eclipse插件并编写运行WordCount程序
查看>>
U盘、移动硬盘引导启动安装linux系统【Centos 6.4 】
查看>>
JSP标签和JSTL标签注意点
查看>>
ASP.NET 实现轻量级的工作流[审批流程]
查看>>
centos 7 网卡名称更改
查看>>
我的友情链接
查看>>