Qt 在QLabel上显示char*位图的最快方式

Qt 在QLabel上显示char*位图的最快方式,qt,qpainter,qpixmap,qlabel,Qt,Qpainter,Qpixmap,Qlabel,我正在开发一个图像处理应用程序,它从IDS uEye驱动程序获取图像数据,作为原始char*缓冲区。我需要向用户显示此图像。(据我所知,Qt应使用QLabel类来实现此目的)。我还应该说明图像处理算法,我认为直接修改char*缓冲区是最快的 我已经看到了很多使用这种方法的代码示例: label.setPixmap(QPixmap::fromImage(image)); 其中,image是从char*缓冲区构造的QImage 但是,我在uEye演示应用程序源代码中发现了以下代码: void Pa

我正在开发一个图像处理应用程序,它从IDS uEye驱动程序获取图像数据,作为原始
char*
缓冲区。我需要向用户显示此图像。(据我所知,Qt应使用
QLabel
类来实现此目的)。我还应该说明图像处理算法,我认为直接修改
char*
缓冲区是最快的

我已经看到了很多使用这种方法的代码示例:

label.setPixmap(QPixmap::fromImage(image));
其中,
image
是从
char*
缓冲区构造的
QImage

但是,我在uEye演示应用程序源代码中发现了以下代码:

void PaintLabel::paintEvent(QPaintEvent *ev)
{
  //...
  QPainter painter(this);
  painter.drawImage(rectangle, image);
  painter.end();
}
其中,
PaintLabel
QLabel
的一个子类,
rectangle
是一个
QRectF
显示应在哪里绘制图像

我做了一些时间测量,结果发现第二种方法大约快1.8倍(约9 ms vs 16 ms)


所以,我的问题是:有没有其他方法可以让
char*
位图显示得更快-越快越好?注意,这只是一个相同的缓冲区,只是它的内容在变化;因此,无需为每一帧从头开始重建所有内容,只需刷新即可

请记住,显示器的刷新率很可能是60 Hz。这意味着监视器中的图片每16.67毫秒更改一次。完全没有必要尝试以更快的速度绘制图像。您可以看到,显示图像大约占应用程序所需全部工作的1%。因此,CPU时间消耗才是最重要的。如果你想最大限度地减少CPU的使用,那么我建议使用OpenGL(和)来绘制图像。你在没有OpenGL的情况下成功地绘制了原始数据吗?@SarahCompard,OpenGL无法以任何方式加速RAM和图形内存之间的转换。到目前为止,我发现的最快的绘图方式是:分配char*buffer,从中创建一个QImage,然后将这个非常相同的缓冲区提交给驱动程序。这样,您就可以直接将图像输入到QImage中,而无需记忆。然后重新实现QLabel的paintEvent,并使用QPainter将所需数据从QImage导出到VGA卡。