QT无法从缓冲区加载图像

时间:2017-05-16 10:27:39

标签: c++ qt qt5.8

我的工作环境: Qt 5.8 MSVC2015 64位,QT GraphicsView,Windows 7 64位

我正在从缓冲区加载图像(恶魔进程正在发送图像缓冲区),但无法使用缓冲区创建图像。

QFile file("D:\\2.png");
if (!file.open(QFile::ReadOnly))
    qDebug() << "Error failed to Open file";
QByteArray array = file.readAll();
array = array.toBase64();
QImage tempimage((uchar *)array.data(), 250, 250, QImage::Format_RGBX8888);
if (!tempimage.isNull()) {
      ///I always get this error
    qDebug() << "Error!!! failed to create a image!"; 
}

知道我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:0)

为什么要转换为base64?

等等,你在哪里从PNG转换为图像平面?

尝试bool QImage::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR)使用原始数据加载PNG而不是CTor。

如果您的有线格式不是PNG(实际上是base64编码的原始像素数据),那么您想转换FROM base64。

答案 1 :(得分:0)

感谢所有建议&amp;救命。 我修复了我的错误删除base64转换&amp;使用带有QByteArray的loadFromData加载缓冲区reinterpret_cast:

以下是最终解决方案:

QFile file("D:\\2.png");
if (!file.open(QFile::ReadOnly))
    qDebug() << "Error failed to Open file";
QByteArray array = file.readAll();

 QImage tempimage;
 //// This very important to cast in below format, QByteArray don't work as arguments.
 tempimage.loadFromData(reinterpret_cast<const uchar *>(array.data()),array.size());
if (tempimage.isNull()) {
    qDebug() << "Error!!! failed to create a image!";
}