Seite 1 von 1

QPixmap in XML-Datei speichern?

Verfasst: 24. April 2008 11:40
von KuhTeh
Ich möchte ein QPixmap in eine Xml-Datei mittels QXmlStreamWriter speichern. CDATA-Konstrukte werden über writeCDATA( const QString ) übergeben. Ich muss mein QPixmap-Objekt also zuvor in einen String umformen:
QVariant var= myQPixmap;
Habe dann versucht, das QVariant per QVariant.toString() an writeCDATA zu übergeben.
Es stellte sich heraus, dass das Programm nur eine leere CDATA-Sequenz in der Datei ablegt. Der Fehler muss also schon bei der QVariant-Umformung geschehen sein. QPixmap stellt aber ausdrücklich einen "Zitat: operator QVariant() const" zur Verfügung.
Was mache ich falsch? Gibt es einen geschickteren Weg?
[/b]

Verfasst: 24. April 2008 12:18
von upsala
Man kann nicht aus jedem QVariant einen QString machen. QVariant::canConvert()

QPixmap in ein QByteArray sichern, QByteArray in Base64 konvertieren

Verfasst: 24. April 2008 12:52
von PeterLustig
Du solltest aber bedenken, dass der Speicherplatzverbrauch des Bildes sich dann um einiges erhöht, wenn du es in base64 konvertierst. Aber ich halte das auch für die Beste Möglichkeit, wenn du unbedingt das Bild in einer XML Datei speichern wilslt.

Verfasst: 24. April 2008 12:56
von Christian81
Ggf. nicht direkt als QPixmap sondern als jpeg oder so.

Verfasst: 24. April 2008 13:59
von RHBaum
Ggf. nicht direkt als QPixmap sondern als jpeg oder so.
Wuerd ich von der Art der bilder abhaengig machen ...
jpeg lohnt sich nur, bei groesseren bildern / fotografien ...

Die in nen XML zu pappen halt ich eh fuer gewagt, was ned heisst das es ned gehen wuerd ^^

Denk mal es handelt sich eher um kleine grafiken ... eher symbole / pictogramme. Da wuerd ich png empfehlen ... macht die wenigsten probs. dafuer iss der platzverbrauch groesser ... aber wer sowas in nem xml speichern will, hat primaer eh andere sorgen ...

base64 ist nicht nur ideal, sondern grad dafuer gemacht, um bytefolgen in darstellbare ASCII zeichen zu expandieren .... da XML nix anderes akzeptiert, bist eh auf sowas angewiesen. Sich selber da was zu ueberlegen waer das rad neu erfinden ...

Ciao ..

Verfasst: 24. April 2008 16:15
von KuhTeh
Erstmal Danke für die Beiträge.
Ich komme aber irgendwie nicht weiter. Wie bekomme ich die Daten in ein QByteArray? Die Umformung nachBase64 kann ausserdem doch erst erfolgen, denn ich die Daten schon im QByteArray habe.
Der Aufruf der Funktion "operator QVariant()" in QPixmap und QImage sind auch nicht weiter erläutert.

Verfasst: 24. April 2008 16:23
von ConfusedSushi
eventuell kann man um Platz zu sparen
das ByteArray noch mittles qCompress
komprimieren bevors nach base64 geht

Verfasst: 24. April 2008 16:29
von ConfusedSushi

Verfasst: 24. April 2008 16:49
von KuhTeh
@ConfusedSushi:
Tausend Dank! Ich habe die entsprechende "Class Reference" bestimmt 100 Mal in der Hand gehabt, aber ....
Genau was ich gesucht habe. Thankx!

Verfasst: 24. April 2008 16:51
von upsala
QPixmap in ein QByteArray sichern
Hättest du die Funktion gefunden, wenn ich den Satz in englisch geschrieben hätte?

Wenn ein qCompress wirklich noch was bringt, dann hat man beim ablegen des QPixmaps ins QByteArray schon was falsch gemacht...

Verfasst: 24. April 2008 17:04
von ConfusedSushi
aber wenn ich das richtig verstanden hab sichert QPixmap:save rohdaten ...

zusätzlich zum Platz sparen ist mir grad noch der QImageWriter ins Auge gefallen.

Verfasst: 24. April 2008 17:29
von upsala
bool QPixmap::save ( QIODevice * device, const char * format = 0, int quality = -1 ) const

This function writes a QPixmap to the given device using the specified image file format and quality factor. This can be used, for example, to save a pixmap directly into a QByteArray:

Verfasst: 24. April 2008 17:46
von ConfusedSushi
ok grossmeister :P