Seite 1 von 1

QImage über QTcpSocket senden

Verfasst: 28. März 2009 12:39
von tseucs
Hallo,

folgendes Problem: Ich habe eine Bilddatei (z.b. logo.png) die ich über einen QTcpSocket an einen anderen Rechner schicken möchte.
Mache ich das über

Code: Alles auswählen

QFile datei("logo.png");
QByteArray ba = datei.saveAll();
socket.write(ba);
funktioniert es einwandfrei.
Da es ja aber auch mal andere Bildtypen sein können (gif, jpg, usw) und ich sicher gehen möchte, das ein PNG am anderen Ende ankommt, wollte ich den Umweg über QImage gehen:

Code: Alles auswählen

QImage logo("logo.png");
QByteArray ba;
QBuffer buffer(&ba);
logo.save(&buffer, "PNG");
socket.write(ba);
Leider kommt dann aber am anderen Ende nur Müll raus, nämlich eine Datei die ca. 10 % größer ist als das Original - und entsprechend auch nicht mehr verarbeitet werden kann.
Weiss jemand was ich hier falsch mache und wie ich das Problem lösen kann?

Gruß
Torsten

Verfasst: 28. März 2009 13:35
von Christian81
Den Buffer sollte man schon schliessen.

Verfasst: 28. März 2009 13:52
von tseucs
Danke, habe ich eingebaut - das Ergebnis ist das selbe: Die Datei ist einfach zu Groß.

Verfasst: 28. März 2009 14:04
von Christian81
Was gibt write() zurück? Wann wird socket wieder gelöscht? Ggf. bevor es alle Daten senden konnte?

Verfasst: 28. März 2009 15:40
von tseucs
Rückgabe von write: 23477

Der Socket wird erst viel später geschlossen, nach dem write mache ich aber ein waitForBytesWritten(-1). Und auf der anderen Seite kommt ja auch mehr an als es sollte und nicht weniger. Das irritiert mich ja so.

Verfasst: 28. März 2009 15:46
von Christian81
Wenn Du nur n Byte schickst kann auf der anderen Seite nicht mehr ankommen. Ich würde die Daten auf der anderen Seite mal genau anschauen. Vor allem wie sie ausgelesen werden.