Ok, du bekommst den Fehler #41 (unter Delphi 5) und ich weis jetzt was DU falsch gemacht hast.
Alle Stream Operationen verändern den Stream-Zeiger -> Stream.Position, auch .LoadFromStream(). Will man erneut auf die Daten im Stream zugreifen so MUSS man vorher die .Position wieder auf den Anfang der Daten zurücksetzen. Sorry, aber ein oft gemachter Anfängerfehler.
Kurz gesagt: die Operationen der Streams in der
VCL können die .Position innerhalb des Streams verändern sie dürfen sie aber niemals automatisch wieder auf 0 zurücksetzen. Das muß der Programmierer machen, logisch da ansonsten zb. in einem Stream nicht mehrere Bilder gespeichert werden könnten.
In deinem Falle
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
M: TMemoryStream;
I: TJpegImage;
begin
M := TMemoryStream.Create;
I := TJpegImage.Create;
try
M.LoadFromFile(ExtractFilePath(ParamStr(0)) + '303649.jpg');
M.Position := 0; // <--- so ist es richtig
// M.Position := M.Size; // <--- so ist es bei dir und Fehler #41 kommt
I.LoadFromStream(M);
Image1.Picture.Assign(I);
finally
M.Free;
I.Free;
end;
end;
Dein JPEG ist also absolut in Ordnung. Im obigen Beispiel wird .LoadFromFile() benutzt, und diese Funktion setzt sehr wohl M.Position auf 0 zurück. Das ist auch in diesem Falle logisch. Das Beispiel dient also nur als Demonstation wenn du zb. statt .LoadFromFile() .LoadFromStream() benuzten würdest.
Gruß Hagen