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

  一、WIA简介
      (一)关于WIA
      WIA是Windows Image Acquisition 的简称,它是 Windows Millennium Edition (Windows Me) 或者更高版本的 Windows 系统中提供的数字图像获取服务,同时它也能用于管理数字图像设备。
WIA 接口既是应用程序接口(WIA API),又是设备驱动程序接口(WIA DDI),下面要讲述的都是有关 WIA API 的内容。
通过 WIA API,应用程序可以:
      1.运行在强壮稳定的环境中;
      2.最大可能地减少协同配合问题;
      3.枚举可用的图像获取设备;
      4.同时连接多个设备;
      5.用标准的、可扩展的方式查询设备属性;
      6.用标准的、高性能的传送机制获取数据;
      7.在数据传送过程中维持图像属性;
      8.获取大量的设备事件通知消息。
      (二)WIA 架构
      WIA 是使用进程外(Out of process)服务实现的 COM 组件,和大多数进程外服务程序不同的是,WIA 通过提供自己的数据传送机制(IWiaDataTransfer 接口),避免了图像数据传送过程中的性能损失。高性能的 IWiaDataTransfer 接口使用共享内存来传送数据给客户程序。
      二、在VBA中使用WIA获取数据 (利用Filter处理图片)
      WIA Automation Layer不仅能从设备中捕获照片,还能进行简单的处理。当WIA Automation Layer从设备中捕获照片,保存为一个ImageFile对象,我们可以通过访问该ImageFile对象来访问照片的属性。然而,为了保护原来的照片,不能直接通过修改该ImageFile对象的方法修改图片。代替的方法是,使用ImageProcess和一个或多个Filter对象创建一个副本,修改图片。

      以下是可用的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 [默认值]
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值