AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

JPG-Datei als string speichern

Ein Thema von Markus Effenberger · begonnen am 26. Dez 2018 · letzter Beitrag vom 31. Dez 2018
Antwort Antwort
Markus Effenberger

Registriert seit: 2. Jul 2014
44 Beiträge
 
Delphi 10.3 Rio
 
#1

JPG-Datei als string speichern

  Alt 26. Dez 2018, 00:23
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
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 00:29
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 00:35
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 10:55
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#5

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 11:09
Kannst du den Dateistream nicht direkt in eine Datei speichern mit .SaveToFile() ?
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.594 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 12:23
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.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: JPG-Datei als string speichern

  Alt 26. Dez 2018, 15:06
Ich hatte es mal so gemacht :

Code:
 
  aStream := TMemoryStream.Create;
  aStream.LoadFromFile('F:\image.png');
  outstream := TStringStream.Create;
  EncodeStream(aStream, outstream);
  Memo2.Lines.Text := outstream.DataString;
  outstream.Free;
  aStream.Free;
Rückwärts geht genauso, nur mit DecodeStream.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: JPG-Datei als string speichern

  Alt 27. Dez 2018, 00:07
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: JPG-Datei als string speichern

  Alt 27. Dez 2018, 02:35
So kann man ein Bild (oder binärstream) auch in einer xml datei unterbringen oder per http versenden
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#10

AW: JPG-Datei als string speichern

  Alt 31. Dez 2018, 14:21
Ich glaube Idhttp nimmt auch als 2. Parameter einen stream entgegen. Dann sollte das mit einem Tfilestream funktionieren.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz