Loading DDS file to QImage from raw data
-
Hello,
I would like to read a DDS file from an archive and show it using a QImage. I already have the code that is able to get the file contents from the zip file done, but for now I extracted the DDS file to a folder and am reading it from there.
As I'm quite new to Qt, I'm using very simple code for now:int main(int argc, char *argv[]) { QApplication app(argc, argv); QFile file("helm.dds"); QByteArray bArray = file.readAll(); QImage image = QImage::fromData(bArray);//myImage.copy(0, 84, 102, 84).scaled(50, 50); //copying a part of the texture then reducing its size QLabel label; label.setPixmap(QPixmap::fromImage(image)); label.show(); return app.exec(); }
This code compiles, I don't have any issue with it.
The problem comes from QImage::fromData. I'm not able to use "DDS" as the format as it's not supported, so I was wondering if there was any other alternative?
Thank you! -
Hi! You could you imagemagick to convert the DDS to PNG. You could do this either by calling the executable
convert
that comes with imagemagick or you could use imagemagick's C or C++ interface. -
Hi! You could you imagemagick to convert the DDS to PNG. You could do this either by calling the executable
convert
that comes with imagemagick or you could use imagemagick's C or C++ interface.Hi, thank you for your reply!
ImageMagick++ does not seem to do what I'm looking for unfortunately.
I'd like to read / convert everything from memory instead of creating new files. So, read the DDS file in memory, (convert it to some other format if needed) load it into a QImage from a QByteArray (not necessarily a QByteArray though, but something that doesn't require me to create a new file). -
Temporary files e.g. in /var/tmp aren't an option for you?
-
Yes, @SGaist is right; at least here with Qt 5.5.1 it works:
const QString fileName("/home/pw/0.dds"); const QPixmap pixmap(fileName); ui->label->setPixmap(pixmap); const QImage image = pixmap.toImage(); qDebug() << (image.isNull() ? "QImage error" : "QImage ok");