首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Qt/C++:高效绘图

Qt/C++:高效绘图
EN

Stack Overflow用户
提问于 2012-09-28 21:10:57
回答 5查看 7.3K关注 0票数 18

我设计了一个程序,基本上,它将一个几何形状切割成许多小三角形(在“左画布”中),对这一堆三角形应用一些简单的数学变换,然后以新的配置重新绘制它们。请参阅下面的屏幕截图。

为了绘制这些三角形,我使用了QPainter::drawPolygon。右边的每个三角形对应左边的一个三角形,所以我知道我想用什么颜色来画它。

到目前为止,一切都很好。即使我画出比这个更多的三角形(当我使用更小的三角形来切割形状时),这已经足够快了。

我已经在我的程序中添加了一个功能:我可以绘制从图片中提取的三角形,而不是普通的三角形:参见下面的屏幕截图。

问题是我做这件事的方式太慢。我是这样做的:

  1. I遍历所有三角形对于每个三角形,我计算将显示的每个像素的坐标。对于每个像素,我计算图片上相应像素的坐标(这是一个简单的数学运算),并检索该像素的颜色。
  2. I使用QPainter::setPen(QColor)

D12>绘制像素。<代码>H213<代码>G214

我是Qt编程的新手,我对图形一无所知,所以这就是我能想到的。问题是它太慢了(每个画布的paintEvent大约需要0.15s,而普通三角形只需要0.01s )。

我运行了一个分析器,试图了解发生了什么,我注意到在canvas小部件的paintEvent中,

QPainter::drawPoint

  • 27%中花费了58%的时间在QPainter::setPen

中花费了

看起来QPainter::drawPoint太复杂太慢了:我只想让它打印一个给定颜色的像素,仅此而已。

我可能已经找到了问题的解决方案:存储一个表示我希望画布显示的全部内容的QImage (作为canvas小部件的成员变量),并在我的paintEvent中逐个像素地定义它,然后在我的paintEvent结束时使用QPainter::drawImage立即绘制它。我有一个提示,这将是更快的。但是在我重新编写代码之前,我想知道这是否真的是我想要做的。

我希望我没有让你厌烦去做死亡!非常感谢您的真知灼见。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12640698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档