![]() |
JPG-Datei als string speichern
Guten Abend liebes Forum,
Ich komme hier irgendwie nicht weiter. Vielleicht weiß jemand Rat? Eine mobile App auf Android holt sich mittels BildAlsString := HeaderFooterForm.IdHTTP.Get(URL,Dateistream); eine JPG-Datei. Dass die JPG-Datei korrekt übertragen wird, sieht man, wenn man die URL im Browser öffnet. Daran kanns also nicht liegen. Dieser Test soll dann als JPG-Datei gespeichert werden Datei : TextFile; Assign(Datei,System.IOUtils.TPath.Combine(System.I OUtils.TPath.GetDocumentsPath,Bildname)); Rewrite(Datei); Writeln(Datei, BildAlsString); close(Datei); Später soll die Datei in einem Image geladen werden. Image1.Bitmap.LoadFromFile(Dateiname); Das Laden schlägt aber (ohne nähere Gründe in der Exception zu nennen) fehl. Ich weiß nicht weiter :( Bin für jeden Tipp dankbar, Markus |
AW: JPG-Datei als string speichern
Ich bin zwar kein Android Entwickler, aber ich würde an deiner Stelle die bereits verfügbaren Methoden nutzen statt eine eigene zu bauen. Speichere doch mit Hilfe der Stream.SaveToFile() Methode den heruntergeladenen Stream als Datei ab. Eventuell gehen dir beim Schreiben der Datei mit Writeln() Informationen verloren.
Beim Laden bin ich mir gerade nicht sicher, ob du ohne Umwandlung ein JPG zu einem Bitmap zuweisen kannst bzw. direkt ein JPG Bild reinladen kannst. |
AW: JPG-Datei als string speichern
Wenn das JPG wirklich als Zeichenkette übertragen wird, dann bestimmt in irgendeiner Form codiert. Base 64 oder so was. Da sonst die nicht darstellbaren Zeichen verloren gehen. Guck dir einfach mal eine JPG Datei mit einem Editor an. Alles was als schwarzer Block oder Rechteck dargestellt wird repräsentiert ein nicht darstellbares Zeichen. Bevor du die Zeichenkette also in einer Datei speicherst, wie auch immer, musst du sie decodieren, sonst hast du nur Müll in der Datei stehen.
|
AW: JPG-Datei als string speichern
Zumindest das writeln sorgt für Fehler, weil es ein CRLF(?) hinten anhängt.
Ansonsten, warum nicht einen Filestream oder Blckwrite nutzen? Gruß k-H |
AW: JPG-Datei als string speichern
Kannst du den Dateistream nicht direkt in eine Datei speichern mit .SaveToFile() ?
|
AW: JPG-Datei als string speichern
Spätestens seit Delphi Unicode unterstützt, sollte man Strings nicht mehr zum Speichern von binären Daten verwenden. Vermutlich wird bei der Zuweisung so ziemlich alles kaputtkonvertiert. Also folge dem Rat, der hier schon mehrfach stand: Speichere direkt den Stream als Datei ab.
Wenn es unbedingt ein Puffer sein muss, dann wenigstens keinen String nehmen sondern ein Array of Byte oder TBytes. |
AW: JPG-Datei als string speichern
Ich hatte es mal so gemacht :
Code:
Rückwärts geht genauso, nur mit DecodeStream.aStream := TMemoryStream.Create; aStream.LoadFromFile('F:\image.png'); outstream := TStringStream.Create; EncodeStream(aStream, outstream); Memo2.Lines.Text := outstream.DataString; outstream.Free; aStream.Free; |
AW: JPG-Datei als string speichern
Aber es geht ja um binäre Daten. Da ist es eigentlich Blödsinn den Umweg über den String zu nehmen, erst recht wenn dann noch umcodiert werden muß(?).
Der String ist ja eine Notlösung aus der Steinzeit der Programmierung, wenn man einen Puffer variabler Größe brauchte. Gruß K-H |
AW: JPG-Datei als string speichern
So kann man ein Bild (oder binärstream) auch in einer xml datei unterbringen oder per http versenden
|
AW: JPG-Datei als string speichern
Ich glaube Idhttp nimmt auch als 2. Parameter einen stream entgegen. Dann sollte das mit einem Tfilestream funktionieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz