0

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

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

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!"; 
}

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

4

2 回答 2

0

感谢所有建议和帮助。我使用带有 QByteArray reinterpret_cast 的 loadFromData 修复了我的错误删除了 base64 转换和加载的缓冲区:

这是最终解决方案:

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!";
}
于 2017-05-16T11:39:08.890 回答
0

你为什么要转换为base64?

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

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

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

于 2017-05-16T11:22:48.573 回答