Hallo Community,
Ich habe hier (wiedermal) ein Virtual String Tree, im OnSaveNode speichere ich mehre TjpegImage. Wer sich nicht mit dem VST auskennt hier die Funktion:
Delphi-Quellcode:
procedure TForm1.VST_MoviesSaveNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
Data: PTreeData;
begin
Data := VST_Movies.GetNodeData(Node);
Data.Image.SaveToStream(Stream);
end;
Sprich ich benutze einfach die Funktion SaveToStream von der jpeg
unit.
Wenn ich nun diese Datei jedoch wieder lade passiert etwas komisches
, zuerst merkt man es dass der Taskmanager mir eine Speicherauslastung für den Prozess von ~ 800 MB anzeigt, Und wenn ich dann das alles wieder speichern will wird auch die Ausgabedatei ca 800MB groß (normalerweise ist sie 6MB groß), letzendlich kann ich diese Datei dann auch nicht mehr laden (jpeg Fehler #42).
Laden tue ich das übrigens auch ganz normal:
Delphi-Quellcode:
procedure TForm1.VST_MoviesLoadNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
Data: PTreeData;
begin
Data := VST_Movies.GetNodeData(Node);
Data.Cover := TjpegImage.Create;
Data.Cover..LoadFromStream(Stream);
end;
So um das ganze jetzt noch richtig merkwürdig zu machen habe ich follgende Konstellation gestestet:
Erst das ganze in ein jpegImage vom Steeam laden dass mit Assign einem TBitmap zuweisen und dann wieder mit Assign einem TjpegImage.
Delphi-Quellcode:
Data.Cover := TjpegImage.Create;
tmpjpeg := TjpegImage.Create;
tmpBmp := Tbitmap.Create;
tmpjpeg.LoadFromStream(Stream);
tmpBmp.Assign(tmpjpeg);
Data.Cover.Assign(tmpBmp);
tmpBmp.Free;
tmpjpeg.Free;
Und... naja... hier funktioniert es, Man kann die jpegs laden, verwenden und speichern (mit einer 6MB Ausgabedatei).
Ich weiss nicht ob ich einen Fahler beim jpeg.LoadfromStream gefunden habe, oder ich einfach selber irgendwo "Müll" zusammengeschrieben habe, jedoch hoffe ich dass jemand von euch mir helfen kann
Mit freundlichen Grüßen Mike