如何从WPF组件获取snaphshot

时间:2015-10-05 10:00:58

标签: c# wpf graphics bitmap

我们在WPF中有一个Grid组件,其中有几个Image组件。一些Image组件有动画。

我们希望将此制作的动画保存为一些连续的BMP帧。你能告诉我们一个线索吗?与WindowsForms一样,WPF中是否存在图形对象?如果是,如何访问它们?

2 个答案:

答案 0 :(得分:1)

您可以使用RenderTargetBitmap将任何WPF控件保存到文件中,如下面的代码段所示:

RenderTargetBitmap b = new RenderTargetBitmap(1000, 1000, 300, 300, PixelFormats.Pbgra32);

b.Render(controlToRender);

PngBitmapEncoder encoder = new PngBitmapEncoder();

encoder.Frames.Add(BitmapFrame.Create(b));

using (Stream s = File.Create(@"c:\test.png"))
    encoder.Save(s);

答案 1 :(得分:0)

WPF中的图形类与Windows窗体中一样。 对图像进行控制的问题多次受到质疑。 我认为,关于如何做到这一点的最佳答案是WPF - Get size of UIElement in Memory?

您还应该注意,您必须等到图像加载,如此处所述RenderTargetBitmap does not render included images

如果你想渲染整个网格,你可以看一下这个问题 Save image of whole ListView

通过组合这些问题,您应该能够制作数据网格的快照。我相信您可以尝试使用DispatcherTimer捕获多个图像,以便动画以帧显示。