Zitat von
CloudyofSky:
@Der_Unwissende:
Ich habe nun auch deines Ausprobiert und mit dem was du geschrieben hast, klappt es prima, kann sogar sehen das er die Datei anlegt. Was jedoch nicht klappt ist, das ich ein Bild draus lade und dieses dann per TImage ausgeben kann
Ja, das Problem liegt im direkten Laden der Bitmap aus dem Stream. Ein Stream hat einen Positionszeiger, der immer auf die akutelle Lese/Schreibposition zeigt. Lädst du also eine Bitmap aus dem Container in einen Stream, so wird dieser Stream natürlich geschrieben. Beim anlegen des Streams zeigt der Zeiger auf Position 0, nach dem schreiben auf das nächste Byte, dass geschrieben werden kann.
Wenn du jetzt das Bitmap aus diesem Stream lädst, dann zeigt der Zeiger auf das erste Byte das geschrieben werden kann (also noch nicht gesetzt ist). Damit wird kein Bitmap geladen und etwas zu zeichnen, dass keine Dimension hat ist dann auch schwierig. Deshalb musst du einfach nur vor dem Laden den Zeiger zurück setzen. Am einfachsten änderst du in der Funktion readNextFromContainer wie folgt:
Delphi-Quellcode:
...
if Container.Position + length <= Container.Size then
begin
result := TMemoryStream.Create;
result.CopyFrom(Container, length);
end // if Container.Position + length < Container.Size
...
Denke dass es einfach nur das war, der Rest sollte funktionieren. Ach ja, die Abfrage muss auch geändert werden, <= statt kleiner, also halt wie hier, sonst geht das letzte Bild verloren.
Gruß Der Unwissende