WPF学习06:转换控件内容为可存储图片
2015-04-01 14:44
295 查看
在图形软件中,我们经常使用到“另存为图片”的功能,本文即介绍如何将WPF控件显示内容转换为图片。
代码:
测试代码XAML部分:
测试代码后台部分:
结果:
例子
保存界面显示内容为图片:代码:
var bitmapRender = new RenderTargetBitmap((int)MainCanvas.ActualWidth, (int)MainCanvas.ActualHeight, 96, 96, PixelFormats.Pbgra32); bitmapRender.Render(MainCanvas); var bmpEncoder = new BmpBitmapEncoder(); bmpEncoder.Frames.Add(BitmapFrame.Create(bitmapRender)); using (var file = File.Create("output.bmp")) bmpEncoder.Save(file);
转换各种格式的图片
封装出如下函数:private void GetPicFromControl(FrameworkElement element, String type, String outputPath) { //96为显示器DPI var bitmapRender = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight, 96, 96, PixelFormats.Pbgra32); //控件内容渲染RenderTargetBitmap bitmapRender.Render(element); BitmapEncoder encoder = null; //选取编码器 switch (type.ToUpper()) { case "BMP": encoder = new BmpBitmapEncoder(); break; case "GIF": encoder = new GifBitmapEncoder(); break; case "JPEG": encoder = new JpegBitmapEncoder(); break; case "PNG": encoder = new PngBitmapEncoder(); break; case "TIFF": encoder = new TiffBitmapEncoder(); break; default: break; } //对于一般的图片,只有一帧,动态图片是有多帧的。 encoder.Frames.Add(BitmapFrame.Create(bitmapRender)); if (!Directory.Exists(System.IO.Path.GetDirectoryName(outputPath))) Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outputPath)); using (var file = File.Create(outputPath)) encoder.Save(file); }WPF中,控件基本都继承于FrameworkElement,所以,所有的控件都可以直接丢进来,并转换其内容为特定格式的图片。
测试代码XAML部分:
<Window x:Class="BMPGenerator.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <StackPanel> <Canvas Name="MainCanvas" Background="White" Height="270"/> <Button Click="Button_Click">PicGenerate</Button> </StackPanel> </Window>
测试代码后台部分:
private void Button_Click(object sender, RoutedEventArgs e) { GetPicFromControl(MainCanvas, "BMP", @"E:\Tmp\output.BMP"); GetPicFromControl(MainCanvas, "GIF", @"E:\Tmp\output.GIF"); GetPicFromControl(MainCanvas, "JPEG", @"E:\Tmp\output.JPEG"); GetPicFromControl(MainCanvas, "PNG", @"E:\Tmp\output.PNG"); GetPicFromControl(MainCanvas, "TIFF", @"E:\Tmp\output.TIFF"); }
结果:
相关文章推荐
- WPF and Silverlight 学习笔记(十一):WPF控件内容模型
- WPF and Silverlight 学习笔记(十一):WPF控件内容模型
- Qt学习笔记,修改指定图片的大小,转换为QIcon用于QPushButton等控件
- Qt学习笔记,修改指定图片的大小,转换为QIcon用于QPushButton等控件
- WPF学习开发历程(四)——内容控件
- C# 使用FileUpload控件上传图片,将文件转换成二进制进行存储与读取
- WPF学习总结和记录(二)内容控件
- wpf 保存控件中的内容为图片格式
- WPF学习总结和记录(一)内容控件
- WPF and Silverlight 学习笔记(十):WPF控件模型
- 支持导出PDF文件并转换成图片格式的PDF查看控件Spire.PDFViewer
- WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片
- 看源代码学习Session的内容是如何存储的?
- android面试题 包括UI控件及数据存储内容
- WPF学习笔记——为BUTTON添加背景图片
- 以图片的形式存储单文档中的内容
- WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转
- WPF 学习笔记-跨线程引用控件
- WPF自定义图片按钮控件
- ios学习--属性字符串NSAttributeString与NSString相互转换包含图片和emoji图