最佳绘画方法

Best Drawing approach

本文关键字:方法 绘画 最佳      更新时间:2023-10-16

我在wxWidgets中开发了一个应用程序,其中我使用位图进行绘图。所以当我的应用程序第一次启动时,它从文件中读取坐标并相应地绘制线条。应用程序还接收来自网络的UDP数据包,UDP数据包还包含一些必须在屏幕上绘制的xy坐标信息,所以当收到数据包时,我重新绘制位图图像,并显示在屏幕上,我还需要刷新位图鼠标移动事件,因为在鼠标移动时有一些新的绘图,我必须在屏幕上绘制。

所有这些都增加了操作成本并减慢了我的GUI。所以请建议我一些你认为在这种情况下可能有效的替代绘画方法。

我在谷歌上搜索了一下,得到了OpenGL的选项,但由于时间紧迫,我不想使用OpenGL,因为我没有任何OpenGL的经验。

听起来好像您的问题是GUI对用户输入没有响应,因为应用程序正忙于重新绘制显示。对于这类问题,一般有两种解决方法。

  1. 使用工作线程在内存中绘制位图。在此过程中,主线程可以继续与用户交互。一旦重新绘制了位图,工作线程就会向主线程发出信号,主线程就会将完成的位图复制到屏幕上——这是非常快的。

  2. 使用主线程直接将位图绘制到屏幕上,但是在绘制代码中调用wxApp::Yield()。这将允许GUI在漫长的绘图过程中保持对用户的响应。

选项1是"最好的",特别是在多核机器上运行时,但是保持两个线程同步并防止它们之间的争用是一个挑战,除非您具有多线程设计的丰富经验。选项2要简单得多,不过您仍然需要注意,用户交互不会在第一个绘图过程完成之前启动另一个绘图过程。

保存数据以绘制而不是总是刷新位图,并让主循环不时刷新位图。

这样你可以使程序永远不会崩溃。不利的一面当然是反应性会降低(即。当数据出现时,它将在20毫秒后才会显示在屏幕上,而不是立即显示。