我构建的 WPF 应用程序有一个包含各种 UIElement3D 对象的 Viewport3D。现在我想将某个视图的高分辨率快照保存到文件中。我过去曾尝试过 RenderTargetBitmap,但由于以下缺点,我不喜欢这种方法:
- 内存泄漏(至少对于 .NET 3.5 SP1)。然而它应该用 4.0 解决,但我还没有测试过。
- 使用抗锯齿和像素着色器时,软件渲染不会提供与硬件渲染相同的结果。
- RenderTargetBitmap 需要大量时间(例如 10 秒)来形成图像,而不是在屏幕上显示所需的几分之一秒。
所以我想知道是否可以在新的控件/窗口(最好是屏幕外)中使用包含快照副本的 VisualBrush,然后使用 DirectX 或 GDI 技术通过前端或后端缓冲区获取内容。我可以想象超出显卡能力的分辨率可能是一个问题,但这可以通过抓取多个子图像并将它们拼接在一起来解决。那么有人对这个话题有一些想法吗?
请记住,我已经阅读过有关 DirectX、XNA、SlimDX、GDI+、BitBlt 等的信息,但这就是我在这些问题上的所有经验。目标平台是 Windows XP+。如果解决方案是可能的,但不是在 XP 上,我也想知道。
此致,
扬·范德波尔