- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WPF中的图像处理简介WPF中的图像处理简介.doc
HYPERLINK /TianFang/archive/2009/10/18/1585450.html WPF中的图像处理简介
HYPERLINK /TianFang/archive/2009/10/18/1585450.html /TianFang/archive/2009/10/18/1585450.html
和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;
文档评论(0)