Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG Error 53/54 bei Delphi 2009 (https://www.delphipraxis.net/145376-jpeg-error-53-54-bei-delphi-2009-a.html)

bugsysiegel 30. Dez 2009 21:43


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:
        Res:=Http.Get(url);
        AssignFile(Datei,Dir+Dateiname);
        Rewrite(Datei,1);
        BlockWrite(Datei,Res[1],Length(Res));
        CloseFile(Datei);
Das klappt nun wegen den Unicodesrings nicht mehr. Also umkopieren in ein Array:
Delphi-Quellcode:
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);
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.

Vielleicht erspart das dem einen oder anderen eine Fehlersuche....

[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit]

daywalker9 1. Jan 2010 16:38

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:
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;
Gruß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 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