c++ - Direct2D - 保留现有内容并覆盖新值

标签 c++ graphics mfc 2d direct2d

我计划为我的应用程序开发一个 XY 绘图仪。给出一些基本的想法,它应该是什么样子(当然实现会有所不同),请引用herehere .

在模拟过程中(假设,完成模拟需要 4 小时),在固定的 X 轴上,应该(覆盖)写入新的 Y 值。

但是,Direct2D 的问题在于,每次调用 pRenderTarget->BeginDraw() 时,都会删除现有的绘图(/Plot/BitMap/Image 等)并创建新图像被绘制。因此我会失去旧的值(value)观。

当然,我总是可以在缓冲区/变量中缓冲旧的 Y 值,并在下一张图中使用它。但是,模拟运行了 4 个小时,不幸的是我无法保存所有 Y 值。这就是为什么我需要在现有的目标图像/绘图/等上渲染/绘制新的 Y 值。

而且,如果在一定时间内不调用 pRenderTarget->EndDraw(),我的应用程序就会因资源限制而崩溃。

如何避免这个问题并达到要求?

最佳答案

您要问的是一个相当复杂的要求 - 它比看起来更难! Direct2D 是一个 Immediate-Mode drawing API .在即时模式图形中,您在屏幕上绘制的内容没有状态维护或持久性。

在大多数即时模式图形 API 中,都有裁剪和脏矩形的概念。在 Direct2D 中,您可以使用 these three techniques 之一绘制到屏幕的子集。将屏幕外渲染为位图和双缓冲可能是一个值得尝试的好技术。例如你的过程变成:

  • 绘制到离屏位图
  • 位图位图到屏幕
  • 在新数据上,绘制到新位图/与现有位图结合

只有当您添加新数据/绘制时您的绘图不滚动或不改变比例时,此技术才有效。

关于c++ - Direct2D - 保留现有内容并覆盖新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860870/

相关文章:

c++ - std::map::erase 无限循环

c++ - 在 C++ 中使用乘法累加指令内联汇编

java - 处理 AWT 图形上下文的最佳方式是什么?

algorithm - 随机放置没有重叠的矩形

c++ - MFC LoadStringW 不是没有从字符串表中正确加载日文字符串

c++ - 如何比较两个不同的时间值

c++ - OpenGL 3.3 - 我只能绑定(bind)到 GL_TEXTURE0

c# - 如何禁用控制台窗口上下文菜单的 `Close` 项?

Java,根据自己的功能快速图像变形

C++ MFC SQLite sqlite3_exec 回调