Folgender Code funktioniert nicht richtig. Ich versuche eine JPG aus TImage in TMemoryStream zu speichern, um danach den Inhalt des TMemoryStreams in ein Feld vom Typ TBytes zu packen. Die JPG scheint im TMemoryStream intakt, aber nach dem einlesen in TBytes-Feld kommt nur Daten-Müll raus, das heißt anstelle der JPG kommt nur 0x00 raus. Wenn ich ReadBuffer benutze, dann kommt die Meldung "Stream Lesefehler". Wenn ich Read benutze, dann kommt keine Meldung, dafür aber wird in TBytes-Feld Müll reingeschrieben.
Dieses Problem tritt sowohl bei Delphi 11.3 Community Edition, als auch bei Delphi 12.1 Trial Edition auf. Hier ist der Link zu dem Code:
Delphi-Quellcode:
var
a_FileName: String;
begin
if (Assigned(ImageOfTheDay.Picture.Graphic)) then
begin
ImageOfTheDay.Picture.SaveToStream(fMemoryStream);
a_FileName := ExtractFilePath(fFileName) + 'test0.jpg';
fMemoryStream.SaveToFile(a_FileName); // die jpg, die rauskommt, ist intakt
SetLength(fBytes, fMemoryStream.Size);
if (Length(fBytes) > 0) then
fMemoryStream.Read(fBytes[0], Length(fBytes)); // hier wird Müll ins TBytes-Feld reingeschrieben
// fMemoryStream.ReadBuffer(fBytes[0], Length(fBytes));
// bei readbuffer trit stream lesefehler auf, bei einfachem read kommt kein fehler auf
fMemorystream.Clear;
if (Length(fBytes) > 0) then
begin
fMemoryStream.WriteBuffer(fBytes, Length(fBytes));
a_FileName := ExtractFilePath(fFileName) + 'test1.jpg'; // die jpg, die rauskommt, ist kaputt
fMemoryStream.SaveToFile(a_FileName);
fMemorystream.Clear;
end;
end;
end;