和Winform中的GDI+相比,WPF提供了一组新的API用于显示和编辑图像。新API特点如下:

  1. 适用于新的或专用图像格式的扩展性模型。
  2. 对包括位图 (BMP)、联合图像专家组 (JPEG)、可移植网络图形 (PNG)、标记图像文件格式 (TIFF)、Microsoft Windows Media 照片、图形交换格式 (GIF) 和图标 (.ico) 在内的本机图像格式增强了性能和安全性。
  3. 高位深图像数据的保留最多 32 位/通道。
  4. 非破坏性图像缩放、裁切和旋转。
  5. 简化的颜色管理
  6. 支持文件内的专用元数据。
  7. 托管组件利用非托管基础结构提供图像与其他 WPF 功能(如用户界面 (UI)、动画和图形)的无缝集成。托管组件还可以从 Windows Presentation Foundation (WPF) 图像处理编解码器扩展性模型获益,利用该模型可以实现自动识别 WPF 中的新图像格式。

大部分托管的 WPF 图像处理 API 驻留在 System.Windows.Media.Imaging 命名空间中,不过,几个重要的类型(如 ImageBrush 和 ImageDrawing)都驻留在 System.Windows.Media 命名空间,Image 驻留在 System.Windows.Controls 命名空间。

下面我通过一个简单的示例演示一下新的API的使用方法:

图像编码格式转换:

var imageStreamSource = File.OpenRead(@"r:\1\24.bmp");
var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var bitmapFrame = decoder.Frames[0];

//在界面上显示图片
//image1.Source = bitmapFrame;

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(bitmapFrame);
encoder.Save(File.Create(@"r:\1\3.jpg"));

这个功能非常简单,就是把一个bmp格式的图片转换为了一个jpg格式的图片。这个示例也显示了WPF的图像处理的基本方式:

  1. 从解码器(xxxDecoder)中获取图像信息
    创建解码器后,图像信息就保存在Frames(虽然大部分图像(jpg,bmp,png等)只有一帧,但GIF,ico等图像有多帧)属性中了。
  2. 用编码器(xxxEncoder)保持图像信息
    相应的,编码时只要创建编码器,并设置相应的帧即可。

图像处理:

常用的图像处理包括缩放、裁切和旋转等,如下是一个将图像旋转90度的例子。

var imageStreamSource = File.OpenRead(@"r:\1\24.bmp");
var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var bitmapFrame = decoder.Frames[0];

TransformedBitmap myRotatedBitmapSource = new TransformedBitmap();
myRotatedBitmapSource.BeginInit();
myRotatedBitmapSource.Source = bitmapFrame;

// 旋转90度
myRotatedBitmapSource.Transform = new RotateTransform(90);
myRotatedBitmapSource.EndInit();

//旋转

var rotate = new RotateTransform(90);
var rotatedBitMap = new TransformedBitmap(bitmapFrame, rotate);

image1.Source = rotatedBitMap;

裁剪
//CroppedBitmap chainedBitMap = new CroppedBitmap(bitmapFrame,new Int32Rect(100, 0, (int)bitmapFrame.Width - 100, (int)bitmapFrame.Height));

缩放
//var scare = new ScaleTransform(1.5, 2);
//var scaredBitMap = new TransformedBitmap(bitmapFrame, scare);

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rotatedBitMap));
//encoder.Frames.Add(BitmapFrame.Create(scaredBitMap));
//encoder.Frames.Add(BitmapFrame.Create(chainedBitMap));
encoder.Save(File.Create(@"r:\1\3.jpg"));

和上面的例子相比,这里就是多了一个TransformedBitmap变换,其实这和xaml中的变换时一样的。

<Image Width="150" Margin="5" Grid.Column="0" Grid.Row="1">
  <Image.Source>
    <TransformedBitmap Source="/sampleImages/watermelon.jpg" >
      <TransformedBitmap.Transform>
        <RotateTransform Angle="90"/>
      </TransformedBitmap.Transform>
    </TransformedBitmap>
  </Image.Source>
</Image>

其它变换也都可以参照xaml中处理方式进行,这里就不过多介绍了。

转载于:https://www.cnblogs.com/TianFang/archive/2009/10/18/1585450.html

WPF中的图像处理简介相关推荐

  1. 在 Google Colab 中使用 OpenCV 进行图像处理简介

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将实现如何使用 OpenCV 在 google ...

  2. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

  3. Windows Presentation Foundation (WPF)中的命令(Commands)简述

    Windows Presentation Foundation (WPF)中的命令(Commands)简述 原文:Windows Presentation Foundation (WPF)中的命令(C ...

  4. WPF中的Data Binding调试指南

    点击蓝字"大白技术控"关注我哟 加个"星标★",每日良时,好文必达! WPF中的Data Binding如何Debug? 大家平时做WPF开发,相信用Visua ...

  5. 转:WPF中图形表示语法详解(Path之Data属性语法)

    转自:http://blog.csdn.net/johnsuna/article/details/1885597 大可山 [MSN:a3news(AT)hotmail.com]  http://www ...

  6. WPF的Prism框架简介

    什么是Prism Prism是一个用于在 WPF.Xamarin Form.Uno 平台和 WinUI 中构建松散耦合.可维护和可测试的 XAML 应用程序框架. Prism是一个用于在WPF.Xam ...

  7. WPF中的形状Shape与几何图形Geometry详解

    总目录 文章目录 总目录 一.Shape(形状) 1.Shape基本信息 2.Ellipse 1.案例 2.说明 3.Rectangle 1.案例 2.说明 4.Line 1.案例 2.说明 5.Po ...

  8. WPF中GDI+图形图像的绘制:(一)绘制文本——动态设置字体、大小、颜色

    GDI+(Graphics Device Interface Plus图形设备接口加)是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息.GDI+不但在功能上比GDI 要强大很多 ...

  9. 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)

    文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...

最新文章

  1. 分布式系统中节点之间的同步形成区块链
  2. 朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车
  3. 熟练Linux ,先从这 26 个命令开始吧
  4. 面向对象的三大特征之多态(第三个必要条件)
  5. [HAOI2015][loj2127]按位或
  6. 倾听用户呼吁Skype决定开源
  7. [洛谷2357] 守墓人
  8. Bootstrap CSS 编码规范之单行规则声明
  9. Nginx之升级和构建后添加新的模块
  10. leetcode题库3-- 无重复字符的最长子串
  11. 360搜索、UC浏览器等被3·15点名应用已下架;马斯克宣布通过NFT卖歌;美团App再发力社交,内测 “群聊”功能 |极客头条...
  12. 从键盘上输入一个字符串并保存在str1中,并把str1中下表为偶数的字符保存到str2中
  13. SCDN的抗CC攻击和抗DDoS攻击防护是什么?
  14. GTP协议中的APN,TEID,NSAPI,TID
  15. java实现节假日维护_谈谈JAVA实现节假日验证
  16. 数据中心机房监控大厅效果图
  17. nacos服务注册不上
  18. 微软最走运和最倒霉的十个瞬间
  19. Python中利用Opencv进行车牌号检测
  20. Java核心技术之Comparator和Comparable在排序中的应用

热门文章

  1. LeetCode(595)——大的国家(MySQL)
  2. 公司因为薪资问题,走了一个各方面都不错的老工人,花更多的钱招来一个跨行业新手,这是为什么?
  3. 一个5g基站的覆盖范围有多大,有没有4g的大?
  4. 微商人赚钱的4个落地动作
  5. 熊猫烧香当年到底有多残忍?
  6. 前缀,中缀,后缀表达式求值
  7. ubuntu下使用脚本自动禁用笔记本触摸板和键盘
  8. ssma5.3_使用SSMA v7.1 for Oracle迁移到SQL Server
  9. SQL Server数据挖掘–如何将数据转化为有价值的信息
  10. SQL Server商业智能功能–创建简单的OLAP多维数据集