我建立的WPF应用程序包含一个Viewport3D,其中包含各种UIElement3D对象。现在,我想将某个视图的高分辨率快照保存到文件中。我以前尝试过使用RenderTargetBitmap,但是我不喜欢这种方法,因为它有以下缺点:
- 内存泄漏(至少在.NET 3.5 SP1中)。然而,这应该在4.0中解决了,但我还没有测试过。
- 软件渲染在使用抗锯齿和像素着色器时无法产生与硬件渲染相同的结果。
- RenderTargetBitmap需要很长时间(大约10秒)才能形成图像,而屏幕显示只需要几分之一秒。
因此,我想知道是否可以使用VisualBrush,在新的控件/窗口(最好是离屏)中包含一个快照副本,然后通过DirectX或GDI技术从前缓冲区或后缓冲区获取内容。我可以想象,超出图形卡功能的分辨率可能是一个问题,但可以通过抓取多个子图像并在之后将它们拼接在一起来解决。所以,有没有人对这个话题有一些想法呢?
请记住,我已经阅读了关于DirectX、XNA、SlimDX、GDI+、BitBlt等的内容,但这就是我对这些问题的全部经验。目标平台是Windows XP+。如果有可能的解决方案,但不适用于XP,我也想知道。
最好的问候,
Jan van de Pol