![]() |
JPEG Error 53/54 bei Delphi 2009
Hallo liebe Leut,
Heute kein Problem, sondern eine Erklärung eines möglichen Fehlers. Ich habe eine funktionierende Anwendung die Bilder über das Internet lädt mit Delphi 2009 neu compiliert und bekam nun bei jedem Bild das ich so versuchte anzuzeigen einen "Jpeg Error 53" oder manchmal auch 54. Die Bilder waren dann auch mit Irfanview nicht anzuzeigen. Beim stöbern im Netz bemerkte ich das es ähnliche Fehler gibt wenn Leute auf Datenbanken zugreifen und ich denke die Fehlerursache ist die gleiche wie bei mir: Ich habe mit der Indy Komponente TidHttp gearbeitet die einen String zurückliefert und dann das JPEG als Rohdatei gespeichert:
Delphi-Quellcode:
Das klappt nun wegen den Unicodesrings nicht mehr. Also umkopieren in ein Array:
Res:=Http.Get(url);
AssignFile(Datei,Dir+Dateiname); Rewrite(Datei,1); BlockWrite(Datei,Res[1],Length(Res)); CloseFile(Datei);
Delphi-Quellcode:
Ich vermute wenn jemand anders diesen JPEG Error 53 bekommt und z.B. das Bild in einer Datenbank gespeichert ist, dass es die gleiche Fehlerursache ist: Das JPEG wird als String aus der Datenbank geliefert und der wird automatisch zu Unicode umgewandelt.
var buffer : array [1..1000000] of byte;
procedure Copyinbuffer; var i : integer; begin for i:= 1 to length(res) do buffer[i]:=ord(res[i]); end; ... Res:=Http.Get(url); Copyinbuffer AssignFile(Datei,Dir+Dateiname); Rewrite(Datei,1); BlockWrite(Datei,buffer,Length(Res)); CloseFile(Datei); Vielleicht erspart das dem einen oder anderen eine Fehlersuche.... [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit] |
Re: JPEG Error 53/54 bei Delphi 2009
Hi!
also "Length(Res)" wird so nicht funktionieren, da du mit Unicode arbeitest und das einzelne Zeichen 2 byte groß ist. Somit muss du das so machen:
Delphi-Quellcode:
Gruß!
procedure Write;
var strLength : integer; begin Res:=Http.Get(url); Copyinbuffer AssignFile(Datei,Dir+Dateiname); Rewrite(Datei,1); strlength := length(res); BlockWrite(Datei,buffer,SizeOf(res[1])*strLength); CloseFile(Datei); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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