在Qt中如何从QByteArray中加载QPixmap?

11

我有一个字节数组,里面存放着图片的内容(可以是png、bmp或其他格式)。

我该如何将其加载到QPixmap中?

3个回答

19
bool QPixmap::loadFromData ( const QByteArray & data, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )

这里的格式是像"PNG"或类似的字符串文字

QPixmap p;
QByteArray pData;
// fill array with image
if(p.loadFromData(pData,"PNG"))
{
   // do something with pixmap
}

@raive:你能否请添加一个简单的例子? - Bokambo
BYTE* pData; QByteArray pArray; pArray.append((const char*) pData);m_pixmap.loadFromData(pArray,"PNG"); m_pixmap.save((QString("./Test.png"), "PNG"));我正在使用这段代码,但似乎它无法正常工作。 - Bokambo
嗯,这取决于您在pdata中有什么。代码是正确的。 - Raiv
我看到了你的另外两个问题 - 关于QByteArray和非GUI线程...问题可能就出在那里。而且你收到的答案是正确的 - 使用QImage,并为从byte*加载的数据提供大小。 - Raiv

7
以下是应使用的代码,其中您的字节位于imageData变量中,格式由最后一个参数指定:
QPixmap pixmap = QPixmap::fromImage(
    QImage(
        (unsigned char *) imageData, 
        image_width, 
        image_height, 
        QImage::Format_RGB888
    )
);

是的,你可以在这里找到答案:http://stackoverflow.com/questions/6854290/it-is-not-safe-to-use-pixmaps-outside-the-gui-thread-in-qt-embedded-linux - Matyas

0
请使用以下构造函数:
QImage ( const uchar * data, int width, int height, Format format )

这里有更多信息。之后,您可以使用QPixmap.convertFromImage()来创建一个像素图。


我想将字节数组转换为图像,但是QImage的第一个参数需要const uchar*而不是字节数组。 - Bokambo
1
uchar 是字节。只需使用强制转换。 - Aaron Digulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接