如何提高GDI或Qt绘制大量对象的效率

How to improve the drawing efficiency of big number of objects with GDI or Qt

我做了一个类似于AutoCAD的软件,可以读取和显示dwg文件,在dwg背景上画直线或曲线。而且我可以使用鼠标滚轮来放大或缩小绘图。

现在我遇到了一个绘图效率问题,我找不到解决办法,我用MFC GDI来绘制对象,我已经使用双缓冲区来避免闪烁,我也使用clipbox来避免绘制不可见的对象。使用此解决方案,小的 dwg 文件就可以了。但是对于大的dwg文件,比如dwg文件有200,000+行,用GDI绘制这些对象的时间大约是2.0+秒,如果我用鼠标滚轮放大或缩小,软件将被冻结几秒钟。

所以我想知道这个问题是否有一些解决方案。如果有人能给我一些线索,我将不胜感激。感谢提前。

我认为唯一可能的解决方案是使用 DirectX 或 Direct2D 来显示那么大的数据量。 Comparing Direct2D and GDI Hardware Acceleration 文章中描述了这些技术的区别。 核心是GDI用的是CPU,而Direct2D用的是GPU。因此,根本不可能强制 GDI 渲染大量对象。相反,由于驱动程序的一些问题,我在 CPU 执行 Direct2D 渲染时遇到了问题。在这种情况下,Direct2D 渲染与 GDI 一样慢。