WPF将控件导出为图片,主要是使用RenderTargetBitmap 类。
下面是一段示例代码:
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 类的实例,RenderTargetBitmap 类的作用是Visual 对象转换为位图。Visual 类为WPF中的呈现提供支持,其中包括命中测试、坐标转换和边界框计算。下图是WPF中的可视对象层次结构:
可以看出Visual 类是FrameworkElement 的基类。
然后将所要导出为图片的控件作为Render 函数的参数,表示要将改控件转换为图片。下面要解决的就是如何保存为图片文件了。
根据所要保存的图片的格式,可以使用不同的编码器。如BmpBitmapEncoder、BmpBitmapEncoder、JpegBitmapEncoder等,它们都是BitmapEncoder 类的子类。如下图是它们的继承层次机构图:
在上面的例子中使用的是PngBitmapEncoder 类,将控件转换好是位图作为图片中的一帧加人。BitmapFrame类表示的是被编码器所接受的图像数据。之后可以调用编码器的Save 函数,保存为图片。