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, 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?



  • I've never used temporary files, but I did think of them as a last option if nothing else can help.


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    What version of Qt are you using ? DDS is listed in the supported QImage formats



  • 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");
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.