我构建的WPF应用程序具有一个包含各种UIElement3D对象的Viewport3D。现在我想将某个视图的高分辨率快照保存到文件中。我过去尝试过RenderTargetBitmap,但由于以下缺点,我不喜欢这种方法:使用WPF结合硬件渲染代替RenderTargetBitmap
- 内存泄漏(至少在.NET 3.5 SP1中)。但应该用4.0来解决,但我还没有测试过。
- 使用抗锯齿和像素着色器时,软件渲染不会产生与硬件渲染相同的结果。
- RenderTargetBitmap需要大量的时间(如10秒)才能形成图像,而不是屏幕上显示所需的秒数的一小部分。
所以我不知道它是否可能使用VisualBrush,含有快照拷贝,在一个新的控制/窗口(优选离屏),然后抓住内容线槽前置式或后备缓冲使用DirectX或GDI技术。我可以想象,除了显卡功能之外的解决方案可能是一个问题,但这可以通过抓取多个子图像并将它们连接在一起来解决。那么有人对这个主题有一些想法?
请记住,我已经阅读过关于DirectX,XNA,SlimDX,GDI +,BitBlt等等,但这些都是关于这些问题的所有经验。目标平台是Windows XP +。如果一个解决方案是可能的但不是在XP上,我也想知道。
最好的问候,
扬·德波尔
我曾经看过那篇文章,但从未设法让它起作用。您是否有样品,或者您是否知道需要采取措施来获取单个Viewport3D对象的内容。与此同时,我切换到.NET 4.0 – 2011-04-22 14:02:14