最佳绘图方法

时间:2011-09-09 06:14:30

标签: c++ bitmap drawing wxwidgets

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

所有这些都会增加运营成本并降低我的GUI速度。亲切地建议我一些替代绘图方法,您认为在这种情况下可能会有效。

我已经在Google上搜索并获得了OpenGL选项,但由于时间不足,我不想使用openGL,因为我没有任何OpenGL经验。

2 个答案:

答案 0 :(得分:1)

听起来您的问题是您的GUI没有响应用户输入,因为应用程序正在忙于重新绘制显示。对于这类问题,有几种通用的解决方案。

  1. 使用工作线程在内存中绘制位图。虽然这是在进行主线程可以继续与用户交互。重新绘制位图后,工作线程会通知主线程,然后主线程将完成的位图复制到屏幕上 - 这非常快。

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

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

答案 1 :(得分:0)

保存要绘制的数据,而不是始终刷新位图,并让主循环不时刷新位图。

这样你就可以让程序永远不会停滞不前。背面当然是反应性会降低(即,当数据到来时,它将不再在屏幕上显示另外20毫秒而不是立即显示。)