WPF学习06:转换控件内容为可存储图片
2018-06-17 19:50:55来源:未知 阅读 ()
在图形软件中,我们经常使用到“另存为图片”的功能,本文即介绍如何将WPF控件显示内容转换为图片。
例子
保存界面显示内容为图片:
代码:
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); }
测试代码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"); }
结果:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Delphi10.3的ListView学习(大图标) 2020-06-05
- Delphi10.3的SpeedButton/BitBtn学习 2020-06-05
- uniGUI学习之UniStringGrid(35) 2020-04-15
- uniGUI学习之uniButton图标(34) 2020-04-09
- UniGUI学习之hbox布局(33) 2020-04-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash