WPF中的图像处理简介
和Winform中的GDI+相比,WPF提供了一组新的API用于显示和编辑图像。新API特点如下:
- 适用于新的或专用图像格式的扩展性模型。
- 对包括位图 (BMP)、联合图像专家组 (JPEG)、可移植网络图形 (PNG)、标记图像文件格式 (TIFF)、Microsoft Windows Media 照片、图形交换格式 (GIF) 和图标 (.ico) 在内的本机图像格式增强了性能和安全性。
- 高位深图像数据的保留最多 32 位/通道。
- 非破坏性图像缩放、裁切和旋转。
- 简化的颜色管理
- 支持文件内的专用元数据。
- 托管组件利用非托管基础结构提供图像与其他 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的图像处理的基本方式:
- 从解码器(xxxDecoder)中获取图像信息
创建解码器后,图像信息就保存在Frames(虽然大部分图像(jpg,bmp,png等)只有一帧,但GIF,ico等图像有多帧)属性中了。 - 用编码器(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中的图像处理简介相关推荐
- 在 Google Colab 中使用 OpenCV 进行图像处理简介
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将实现如何使用 OpenCV 在 google ...
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...
- Windows Presentation Foundation (WPF)中的命令(Commands)简述
Windows Presentation Foundation (WPF)中的命令(Commands)简述 原文:Windows Presentation Foundation (WPF)中的命令(C ...
- WPF中的Data Binding调试指南
点击蓝字"大白技术控"关注我哟 加个"星标★",每日良时,好文必达! WPF中的Data Binding如何Debug? 大家平时做WPF开发,相信用Visua ...
- 转:WPF中图形表示语法详解(Path之Data属性语法)
转自:http://blog.csdn.net/johnsuna/article/details/1885597 大可山 [MSN:a3news(AT)hotmail.com] http://www ...
- WPF的Prism框架简介
什么是Prism Prism是一个用于在 WPF.Xamarin Form.Uno 平台和 WinUI 中构建松散耦合.可维护和可测试的 XAML 应用程序框架. Prism是一个用于在WPF.Xam ...
- WPF中的形状Shape与几何图形Geometry详解
总目录 文章目录 总目录 一.Shape(形状) 1.Shape基本信息 2.Ellipse 1.案例 2.说明 3.Rectangle 1.案例 2.说明 4.Line 1.案例 2.说明 5.Po ...
- WPF中GDI+图形图像的绘制:(一)绘制文本——动态设置字体、大小、颜色
GDI+(Graphics Device Interface Plus图形设备接口加)是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息.GDI+不但在功能上比GDI 要强大很多 ...
- 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)
文章目录 1.简介 1.1 WPF简介 1.2 WPF 体系结构 1.3 WPF入门开发 2.WebBrowser 2.1 WebBrowser特点 2.2 WebBrowser常用的属性.方法和事件 ...
最新文章
- 分布式系统中节点之间的同步形成区块链
- 朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车
- 熟练Linux ,先从这 26 个命令开始吧
- 面向对象的三大特征之多态(第三个必要条件)
- [HAOI2015][loj2127]按位或
- 倾听用户呼吁Skype决定开源
- [洛谷2357] 守墓人
- Bootstrap CSS 编码规范之单行规则声明
- Nginx之升级和构建后添加新的模块
- leetcode题库3-- 无重复字符的最长子串
- 360搜索、UC浏览器等被3·15点名应用已下架;马斯克宣布通过NFT卖歌;美团App再发力社交,内测 “群聊”功能 |极客头条...
- 从键盘上输入一个字符串并保存在str1中,并把str1中下表为偶数的字符保存到str2中
- SCDN的抗CC攻击和抗DDoS攻击防护是什么?
- GTP协议中的APN,TEID,NSAPI,TID
- java实现节假日维护_谈谈JAVA实现节假日验证
- 数据中心机房监控大厅效果图
- nacos服务注册不上
- 微软最走运和最倒霉的十个瞬间
- Python中利用Opencv进行车牌号检测
- Java核心技术之Comparator和Comparable在排序中的应用