加载QPixmap数据的更好方法

时间:2012-06-26 15:36:47

标签: c++ c qt qimage qpixmap

更好的方法(没有QImage)?:

QImage image(width, height, QImage::Format_RGB888);
memcpy(image.bits(), m_frameRGB->data[0], height * width * 3);
QPixmap pixmap = QPixmap::fromImage(image);

我认为没有理由使用QImage作为中间缓冲区,但QPixmap::loadFromData不会使用此上下文加载数据:

pixmap.loadFromData(m_frameRGB->data[0], height * width * 3); // Need pixmap resize?

2 个答案:

答案 0 :(得分:2)

文档说:“如果未指定格式(这是默认格式),则加载程序会探测文件以获取标题以猜测文件格式”。您只提供指向原始图像字节的指针,但您必须在缓冲区的开头提供标题,例如,对于未压缩的PPM格式。

修改 您还可以测试Roku的建议,使用QImage构造函数将图像数据作为参数,但请参阅文档中的注释:“缓冲区必须在QImage的整个生命周期内保持有效。”

答案 1 :(得分:1)

遵循了hmuelner的提示,并且...的确比QPixmap pixmap = QPixmap::fromImage(image);快一点

QPixmap pixmap(height, width);
QByteArray pixData;
pixData.append(QString("P6 %1 %2 255 ").arg(width).arg(height));
pixData.append((char *)m_frameRGB->data[0], width * height * 3);
pixmap.loadFromData((uchar *)pixData.data(), pixData.size());