2010-03-12 13 views
18

Je rencontre des problèmes pour lire et écrire des données QByteArray dans un fichier.Comment enregistrer un objet QPixmap dans un fichier?

Mon but est de sauvegarder les données QPixmap dans un QByteArray et de sauvegarder ce QByteArray dans un fichier (avec la possibilité de lire ce QByteArray depuis le fichier et dans un QPixmap). Je veux utiliser le code suivant de la documentation QPixmap:

 QPixmap pixmap(<image path>); 
    QByteArray bytes; 
    QBuffer buffer(&bytes); 
    buffer.open(QIODevice::WriteOnly); 
    pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format 

Après avoir écrit le tampon dans un fichier, je veux être en mesure de récupérer le QByteArray et le charger de nouveau dans un QPixmap en utilisant la QPixmap :: loadFromData() fonction. S'il vous plaît laissez-moi savoir si d'autres précisions sont nécessaires (je suis ouvert à d'autres approches, je dois juste être capable de lire et d'écrire le QPixmap dans un fichier! :));

Répondre

34

Cela semblait être un moyen très long pour aller à le faire (mais votre commentaire explique mieux):

Pour l'écriture:

QFile file("yourFile.png"); 
file.open(QIODevice::WriteOnly); 
pixmap.save(&file, "PNG"); 

Pour la lecture:

QPixmap pixmap; 
pixmap.load("yourFile.png"); 

QBuffer est Idéal quand vous avez besoin d'un QIODevice et que vous voulez le garder en mémoire, mais si vous allez sur disque, alors c'est une étape intermédiaire inutile.

EDIT:

Pour écrire pixmaps, et d'autres choses, à un seul fichier je recommande que vous utilisez QDataStream.

Pour l'écriture:

QFile file("outfile.dat"); 
file.open(QIODevice::WriteOnly); 
QDataStream out(&file); 
out << QString("almost any qt value object") 
    << yourQPixMap << yourQList /* << etc. */; 

Ensuite, vous pouvez faire de même pour la lecture:

QFile file("infile.dat"); 
file.open(QIODevice::ReadOnly); 
QDataStream in(&file); 
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */; 

Vous devez vous assurer que vous avez lu dans les mêmes objets que vous les rédigeai. Afin de vous éviter de futurs problèmes de compatibilité, définissez explicitement la version de QDataStream.

+0

Cette solution est géniale, mais je dois pouvoir enregistrer plusieurs données d'image avec du texte dans un seul fichier. Par exemple, mon fichier contiendrait image 1 titre, image 1 info ... etc image 2 titre, image 2 info ... etc Toutes les suggestions? –

+0

Post modifié pour référencer QDataStream. –