gpt4 book ai didi

wpf - 将 WPF 与硬件渲染结合使用,而不是 RenderTargetBitmap

转载 作者:行者123 更新时间:2023-12-04 14:41:07 24 4
gpt4 key购买 nike

我构建的 WPF 应用程序有一个包含各种 UIElement3D 对象的 Viewport3D。现在我想将某个 View 的高分辨率快照保存到一个文件中。我过去曾尝试过 RenderTargetBitmap,但由于以下缺点,我不喜欢这种方法:

  • 内存泄漏(至少在 .NET 3.5 SP1 中)。然而,它应该用 4.0 解决,但我还没有测试过。
  • 使用抗锯齿和像素着色器时,软件渲染无法提供与硬件渲染相同的结果。
  • RenderTargetBitmap 需要大量时间(例如 10 秒)来形成图像,而不是在屏幕上显示所需的几分之一秒。

  • 所以我想知道是否可以在新的控件/窗口(最好是屏幕外)中使用包含快照副本的 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com