我构建的 WPF 应用程序有一个包含各种 UIElement3D 对象的 Viewport3D。现在我想将某个 View 的高分辨率快照保存到一个文件中。我过去曾尝试过 RenderTargetBitmap,但由于以下缺点,我不喜欢这种方法:
所以我想知道是否可以在新的控件/窗口(最好是屏幕外)中使用包含快照副本的 VisualBrush,然后使用 DirectX 或 GDI 技术通过前端或后端缓冲区抓取内容。我可以想象超出显卡能力的分辨率可能是一个问题,但这可以通过抓取多个子图像并将它们拼接在一起来解决。那么有人对这个话题有一些想法吗?
请记住,我已经阅读了有关 DirectX、XNA、SlimDX、GDI+、BitBlt 等的文章,但这就是我在这些问题上的所有经验。目标平台是 Windows XP+。如果解决方案是可能的,但不是在 XP 上,我也想知道。
此致,
扬·范德波尔
最佳答案
这是一个棘手的问题,因为 WPF 将大量内部工作保留给自己,但我的一个 friend Jeremiah Morrill 发现了一种方法来利用 WPF 在渲染窗口时使用的底层 DirectX 表面。我已经将它用于一个听起来与您的需求非常相似的项目,并且它运行得非常好(并且比使用 WPF 为您提供的任何“被禁止的”方法要快得多)。
您可能需要更多地熟悉 DirectX(我保证不会太多!)但您可以阅读它并从他的博客中下载可用的源代码:
http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/438/How-to-get-access-to-WPF-s-internal-Direct3D-guts.aspx
关于wpf - 将 WPF 与硬件渲染结合使用,而不是 RenderTargetBitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437830/