我构建的WPF应用程序有一个包含各种UIElement3D对象的Viewport3D。现在我想将某个视图的高分辨率快照保存到文件中。我以前尝试过RenderTargetBitmap,但由于以下缺点,我不喜欢这种方法:
所以我想知道是否可以在新的控件/窗口(最好在屏幕外)中使用包含快照副本的VisualBrush,然后使用DirectX或GDI技术通过前置或后置缓冲区获取内容。我可以想象超出图形卡功能的分辨率可能是一个问题,但这可以通过抓取多个子图像并将它们拼接在一起来解决。那么对这个主题有什么想法的人呢?
请记住,我已经阅读过关于DirectX,XNA,SlimDX,GDI +,BitBlt等的内容,但这是关于我在这些问题上的所有经验。目标平台是Windows XP +。如果解决方案可行而不是XP,我也想知道。
致以最诚挚的问候,
Jan van de Pol
答案 0 :(得分:1)
这是一个棘手的问题,因为WPF保留了很多内部工作,但是我的一个朋友Jeremiah Morrill发现了一种方法来利用WPF在渲染窗口时使用的底层DirectX表面。我已经将它用于一个听起来与你的要求非常相似的项目,它的工作效果非常好(比使用WPF给你的任何“禁止”方法更快)。
你可能需要熟悉一点DirectX(不要太多,我保证!)但你可以阅读它并从他的博客下载工作源代码: