将WPF控件导出为图片

在编程过程中,我们经常遇到需要截图的时候。那么如何将控件上呈现的内容保存为图片呢?这里介绍RenderTargetBitmap 这个类,它的作用是将 Visual 和其子类的对象转换为位图。因此任何继承自Visual 类的控件都可以用RenderTargetBitmap 保存为图片。

下面一段代码是将一个名为exportGrid的Grid 类型的控件保存为图片(包括Grid所包含的控件)。

csharp 复制代码
RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)this.exportGrid.ActualWidth, (int)this.exportGrid.ActualHeight, 96d, 96d, PixelFormats.Default);
targetBitmap.Render(this.exportGrid);
PngBitmapEncoder saveEncoder = new PngBitmapEncoder();
saveEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));
System.IO.FileStream fs = System.IO.File.Open(fileName, System.IO.FileMode.OpenOrCreate);
saveEncoder.Save(fs);

上面的代码中,首先构造了一个RenderTargetBitmap 实例,构造函数的前两个参数是需要保存的位图的宽度和高度,之后两个参数是位图的水平和垂直DPI,最后一个参数是位图的像素格式(比如RGB24,BGR32等等)。

然后调用RenderTargetBitmapRender 函数将控件渲染为位图的内容。Render 函数的参数是需要保存为图片的控件。

最后通过对应的图片编码器将RenderTargetBitmap 保存为图片,本例中是将RenderTargetBitmap 的内容保存为PNG格式的图片,因此使用的是PngBitmapEncoder

根据所要保存的图片的格式,可以使用不同的编码器。如BmpBitmapEncoder、BmpBitmapEncoder、JpegBitmapEncoder等,它们都是BitmapEncoder类的子类。如下图是它们的继承层次机构图:

Visual类为WPF中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算。下图是WPF中的可视对象层次结构:

相关推荐
搞瓶可乐1 年前
鸿蒙ArkTs实战之截图保存图片到相册,详细教程,不使用SaveButton的方法,附上源码和效果图
华为·harmonyos·arkts·保存图片·操作沙箱·鸿蒙解决方案·媒体操作
SuperHeroWu71 年前
【HarmonyOS】 鸿蒙保存图片或视频到相册
华为·harmonyos·鸿蒙·授权·保存图片·保存视频·媒体库
哈市雪花2 年前
利用WPF绘制轮廓并保存为图片
c#·wpf·保存图片·几何算法·轮廓提取
句号(在IT行业摸爬滚打)2 年前
微信小程序canvas画布图片保存到相册官方授权、自定义授权、保存
微信小程序·canvas·授权·画布·保存图片