我正在开发一个程序,必须使用特殊算法计算1024x1024图片上每个点的颜色。点的颜色代表一些值。因此,每个点都独立于其他点,必须单独绘制。我不必太频繁地刷新图片。实际上,我只需要显示一次。
在Qt中绘制单独像素的最快方法是什么?
我可以获得某种“屏幕内存”并将所有图片写为4字节集的数组,将每个像素表示为该内存中的4个字节吗?
答案 0 :(得分:8)
QImage
类针对像素操作进行了优化。您可以使用所需大小实例化一个,然后单独设置像素setPixel
,或访问原始数据并通过bits()
对其进行操作。请务必使用正确的格式(例如,RGBA值或8位图像的颜色索引)
答案 1 :(得分:6)
最快的解决方案可能是创建QImage
,操纵它(设置像素),然后让Qt绘制它。
QImage类用于快速IO,来自手册:
QImage类提供与硬件无关的图像表示,允许直接访问像素数据,并可用作绘图设备。
QImage类支持Format enum描述的几种图像格式。这些包括单色,8位,32位和alpha混合图像,可在Qt 4.x的所有版本中使用。
详细说明部分提供了有关像素操作的信息。
要显示它,最简单的方法是将其转换为带有QPixmap::fromImage
的像素图,然后将其放在带有QLabel::setPixmap
的标签中。
要获得更多控制权,您可以对QWidget
进行子类化,重载paintEvent
,并使用QPainter
QPainter::drawImage
绘制QImage。
答案 2 :(得分:2)
您可以尝试使用OpenGL widget和glDrawPixels功能。