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 zeichen

    TJPEGImage *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


Anmelden zum Antworten