QT 无法从缓冲区加载图像
Posted
技术标签:
【中文标题】QT 无法从缓冲区加载图像【英文标题】:QT failed to load Image from Buffer 【发布时间】:2017-05-16 10:27:39 【问题描述】:我的工作环境: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!";
知道我在这里缺少什么吗?
【问题讨论】:
也许 array.data() 为空,你能检查一下吗? 你的逻辑陈述是错误的——你说如果它不为空,那就是一个错误。从if (!tempimage.isNull())
中删除!
你试过32位格式吗?
@Steve Lorimer:感谢您的指正。但我的图像加载为模糊图像。 @Tomaz array.data() 不是 NULL 值。
@Florent ,我尝试使用图像 QImage::Format_BGR30。但我仍然感到不安。
【参考方案1】:
你为什么要转换成base64?
等等,你在哪里从 PNG 转换为图像平面?
尝试bool QImage::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR)
使用原始数据加载 PNG 而不是 CTor。
如果您的有线格式不是 PNG(实际上是 base64 编码的原始像素数据),那么您想要从 base64 转换。
【讨论】:
【参考方案2】:感谢所有建议和帮助。 我使用 loadFromData 和 QByteArray reinterpret_cast 修复了我的错误删除了 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!";
【讨论】:
以上是关于QT 无法从缓冲区加载图像的主要内容,如果未能解决你的问题,请参考以下文章