在C#中使用WIA获取扫描仪数据(利用Filter处理图片)
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处理图片)的更多相关文章
- 在C#中使用WIA获取扫描仪数据
WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪.数码相机)中获取静态图像,以及管理这些设备.它既是 ...
- C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据
我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...
- asp.net三层架构 及其中使用泛型获取实体数据介绍
asp.net中使用泛型获取实体数据可以发挥更高的效率,代码简洁方便,本例采用三层架构.首先在model层中定义StuInfo实体,然后在 DAL层的SQLHelper数据操作类中定义list< ...
- Oracle中使用游标获取指定数据表的所有字段名对应的字符串
操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...
- js中把ajax获取的数据转化成树状结构(并做成多级联动效果)
1.首先通过ajax获取数据,此处省略,直接贴出获取到的数据格式 var arr = [{ id: 1, name: "一级标题", pid: 0 }, { id: 2, name ...
- Asp.net Mvc中分部视图获取后台数据并展示
方式一: 1.主页面中代码: @{Html.RenderAction("CreateLeftMenu");} 2.Controller中代码: public PartialView ...
- ajax请求获取的数据无法赋值给全局变量问题总结
一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...
- 随机获取数据库中的某一条数据(基于yii2框架开发)
注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
随机推荐
- C#DbHelperMySQL数据库帮助类 (转载)
主要功能如下数据访问抽象基础类 主要是访问Mysql数据库主要实现如下功能 .得到最大值 .是否存在 .是否存在(基于MySqlParameter) .执行SQL语句,返回影响的记录数 .执行MySq ...
- vc调用BCB的dll 参数传递 报错
可能原因: 调用方式约定不一致. 函数调用约定如下: 1. __cdecl:C 和 C++ 程序的缺省调用规范. 2. __stdcall:标准调用约定(即WINAPI调用约定),也就是pascal调 ...
- mysql的sql分页函数limit使用
My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M, ...
- andriod 中设置sdk升级代理服务器
Android SDK 在线更新镜像服务器资源: 大连东软信息学院镜像服务器地址: http://mirrors.neusoft.edu.cn 端口:80 北京化工大学镜像服务器地址: IPv4: h ...
- BFC探秘
今天面试被问到了BFC,听到这个缩略词我是懵比的,啥东西?还是太年轻太简单啊.于是面试结束之后搜了几篇博客看了下,看完有一种豁然开朗的感觉,一些之前未能理解的CSS元素行为也知其所以然了.顺便说一下, ...
- EDM推送
一.需求描述: 日前,做了一个发送客户账单的功能,邮件模板采用自定义,生成vm文件,保存至redis, 采用jodd-mail发送邮件,查询用户账单数据,账单明细,缓存加载模板并渲 ...
- python学习笔记--随时更新
# coding=GBK score = 90 if score >= 80: print("好") elif score >= 60: print("及格& ...
- 将requirejs进行到底(2)
前一篇:JS模块化工具requirejs教程(一):初识requirejs 我们以非常简单的方式引入了requirejs,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等. 基 ...
- 日期-用Datapicker实现前一天后一天
运用了JQuery UI Datepicker 插件和一些常用日期的方法.其中Datepicker的API具体可参考[http://api.jqueryui.com/datepicker/#optio ...
- PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA']
PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA'] 最近用微信api写接口时用到了这个,记录,下面转载开始: —————————— 这是手册里写的 总是产生变量包含有原始的 P ...