我的工作环境: 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!";
}
知道我在这里缺少什么吗?
答案 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!";
}