TJPGImage->Savetostream(stringstream)
-
ich habe folgendes problem: ich will ein jpg als text in einen string kopieren.
das jpg mit der methode SaveToFile geht ohne probleme,savetostream theoretisch auch,laut TStringStream->Size sind da irgendwas mit 110k zeichen,was auch stimmen sollte,allerdings wenn ich dann den text mit TStringStream->DataString
in einen string oder in ein Memo übertragen will enthalten diese immer nur 4 zeichenTJPEGImage *jpg = new TJPEGImage();
jpg->Assign(Image->Picture->Bitmap); //kopieren des bildes von image nach jpg
TStringStream *temp=new TStringStream("");
ShowMessage(temp->Size);
jpg->SaveToStream(temp); //speichern als stringstream
jpg->SaveToFile("test.jpg"); //speichern als test.jpg
ShowMessage(temp->Size);
Log->Text=temp->DataString; //log ist ein memo
string x;
ShowMessage(temp->DataString);
x=temp->DataString.c_str();
ShowMessage(x.length());
-
So eine Memo Box hat nur nen beschränkten Zeichensatz.
Wer weiß was in TStringStream für Zeichen sind. Wahrscheinlich ein Haufen solcher Zeichen "\n".
-
Du solltest KEINE Binaerdaten (Bilder) in einen String (Stream) speichern oder daraus lesen wollen!!!

Text- Daten (Strings) beenden das Lesen bei 'nem bestimmten Binaerzeichen (^Z). Alles danach ist nicht lesbar, DATEIENDE!

Fuer Bilder solltest Du typlosen Stream nutzen!
-
was sollte ich dann fürn typ nehmen?
ich will das ganze als text per sockets verschicken
-
äh vielleicht ist genau das das Problem? Du kannst binäre Daten numal nicht als String versenden ausser du encodierst sie entsprechend (z.B. Base64)... Ansonsten sind binäre Datentypen (z.b. char-Zeiger, mit Memory (mem*) und nicht mit String (str*)-Funktionen bearbeitet) das Mittel der Wahl. Siehe vielleicht auch in der FAQ unter "Protokollentwicklung"...
-junix