Wie ein QPixmap Objekt in einer Datei speichern?
Frage
Ich habe Probleme beim Lesen und QByteArray Daten in eine Datei zu schreiben.
Mein Ziel ist es QPixmap Daten in eine QByteArray und speichert, dass QByteArray in eine Datei (mit der Fähigkeit, lesen Sie diese QByteArray wieder aus der Datei und in eine QPixmap) zu speichern. 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 in der Lage sein, die QByteArray abrufen und laden Sie es wieder in eine QPixmap mit dem QPixmap :: loadFromData () Funktion.
Bitte lassen Sie mich wissen, ob eine weitere Klarstellung erforderlich ist (ich bin offen für alternative Ansätze wie auch, ich nur in der Lage sein muß, die QPixmap in eine Datei zu lesen und schreiben :)!);
Lösung
Das 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
groß ist, wenn Sie ein QIODevice
brauchen und wollen es im Speicher zu halten, aber wenn Sie tatsächlich auf der Festplatte ausgehen, dann ist es eine unnötige mittlere Stufe.
EDIT:
Um pixmaps zu schreiben, und andere Dinge, in einer einzigen Datei würde ich empfehlen, dass Sie ein href verwenden <= „https://doc.qt.io/qt-5/qdatastream.html“ rel = "nofollow noreferrer „> QDataStream .
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 zum Lesen in ähnlicher Weise tun:
QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;
Sie müssen sicherstellen, dass Sie in die gleichen Objekte lesen, wie Sie sie aus schrieb. Um sich zukünftige Kompatibilität Kopfschmerzen zu sparen, die QDataStream Version explizit festgelegt.