2010-03-12 8 views
18

Ich habe Probleme mit Lesen und QByteArray Daten in eine Datei zu schreiben.Wie ein QPixmap Objekt in einer Datei speichern?

Mein Ziel ist es, QPixmap-Daten in einem QByteArray zu speichern und dieses QByteArray in einer Datei zu speichern (mit der Fähigkeit, dieses QByteArray aus der Datei und in eine QPixmap zu lesen). Ich möchte von der QPixmap Dokumentation folgenden Code verwenden:

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

Nach dem Puffer in eine Datei zu schreiben, möchte ich die QByteArray abrufen zu können und laden sie wieder in eine QPixmap mit dem QPixmap :: loadFromData() Funktion.

Bitte lassen Sie mich wissen, wenn eine weitere Klärung erforderlich ist (Ich bin offen für alternative Ansätze, ich muss nur in der Lage sein zu lesen und schreiben Sie die QPixmap in eine Datei! :));

Antwort

34

, der wie ein wirklich langer Weg schien es zu tun (aber Ihr Kommentar besser erklärt):

Zum Schreiben:

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

Zum Lesen:

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

QBuffer ist groß, wenn Sie benötigen ein QIODevice und wollen es in Erinnerung zu halten, aber wenn du gehst raus tatsächlich auf der Festplatte, dann ist es ein unnötiger Zwischenschritt.

EDIT:

pixmaps zu schreiben, und andere Dinge, in einer einzigen Datei würde ich empfehlen, dass Sie QDataStream verwenden.

Zum Schreiben:

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

Dann können Sie in ähnlicher Weise für das Lesen tun:

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

Sie müssen sicherstellen, dass Sie in den gleichen Objekten zu lesen, wie Sie sie schrieb. Um sich zukünftige Kompatibilität Kopfschmerzen zu speichern, setzen Sie sich ausdrücklich QDataStream Version.

+0

Diese Lösung ist groß, aber ich brauche, zusammen mit Text in einer einzigen Datei mehrere Bilddaten speichern zu können. Zum Beispiel würde enthält meine Datei Bild 1 Titel, Bild 1 info ... etc Bild 2 Titel, Bild 2 info ... etc Irgendwelche Vorschläge? –

+0

Beitrag editiert QDataStream zu verweisen. –