Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TjpegImage . LoadfromStream (https://www.delphipraxis.net/153950-tjpegimage-loadfromstream.html)

Mikescher 22. Aug 2010 11:52

Delphi-Version: 2010

TjpegImage . LoadfromStream
 
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 :cyclops: , 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 :oops:

Mit freundlichen Grüßen Mike


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