Seu*_*eub 18 c++ graphics qt pixel qpainter
我设计了一个程序,基本上,它将几何形状切割成许多小三角形(在"左侧画布"中),对这组三角形应用一些简单的数学变换,并在新的配置中重绘它们.请参阅下面的屏幕截图

为了绘制这些三角形,我使用QPainter::drawPolygon.右边的每个三角形对应左边的三角形,所以我知道我想用什么颜色来绘制它.
到目前为止,很好.即使我画了比这更多的三角形(当我使用更小的三角形来切割形状时),这足够快.
我在程序中添加了一个功能:我可以绘制从图片中提取的三角形而不是普通的三角形:请参阅下面的截屏.

问题是我这样做的方式太慢了.我是这样做的:
QPainter::setPen(QColor)和QPainter::drawPoint(QPoint)绘制像素.我是Qt编程的新手,我对图形一无所知,所以这就是我能想到的.问题是它"不可接受"太慢(paintEvent每个画布大约需要0.15s,而普通三角形则为0.01s).
我跑了一个探查器试图了解发生了什么,我注意到在画布小部件中paintEvent,
QPainter::drawPointQPainter::setPen它似乎QPainter::drawPoint太复杂和缓慢:我只是想让它打印一个给定颜色的像素,就是这样.
我可能已经找到了解决我的问题的方法:存储一个QImage(作为我的画布小部件的成员变量),它代表我希望我的画布显示的整个事物,并在我的paintEvent像素中完全定义它,然后立即绘制它在我结束paintEvent用QPainter::drawImage.我有一个提示,这会更快.但在我重新编写代码之前,我想知道这是否真的是我想要做的.
我希望我没有让你做死!非常感谢您的见解.
非 OpenGL 解决方案:
对目标图像使用 RGB 缓冲区。像以前一样完成前 3 个步骤。一旦找到位置和像素颜色,就可以将其设置在此缓冲区上。然后你使用
QImage::QImage ( uchar * data, int width, int height, Format format )
Run Code Online (Sandbox Code Playgroud)
根据先前的缓冲区构造图像。它与您提供的解决方案很接近,并且比您当前拥有的解决方案要快得多。
| 归档时间: |
|
| 查看次数: |
6567 次 |
| 最近记录: |