我计划为我的应用程序开发一个 XY 绘图仪。给出一些基本的想法,它应该是什么样子(当然实现会有所不同),请引用here和 here .
在模拟过程中(假设,完成模拟需要 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/