QT не удалось загрузить изображение из буфера

Моя рабочая среда: 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 ответа

Спасибо за все предложения и помощь. Я исправил свои ошибки, удалил преобразование base64 и загрузил буфер, используя loadFromData с QByteArray 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!";
}

Почему вы конвертируете в base64?

Подождите, где вы конвертируете из PNG в плоскость изображения?

Пытаться bool QImage::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR) загрузить PNG вместо CT или с необработанными данными.

Если ваш проводной формат не PNG (а на самом деле это необработанные пиксельные данные в кодировке base64), то вы хотите конвертировать из base64.

Другие вопросы по тегам