Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schnelles Laden von jpegs [Speicherleck] (https://www.delphipraxis.net/53923-schnelles-laden-von-jpegs-%5Bspeicherleck%5D.html)

Nicolai1234 25. Sep 2005 15:03


Schnelles Laden von jpegs [Speicherleck]
 
Ich habe zwar schon im Forum gesucht, aber nichts passendes gefunden:
Ich schreibe gerade ein Programm, dass alle jpegs aus einem bestimmten Ordner anzeigt. Dafür soll aber nur eine Vorschau von etwa 100*67 Pixeln gemacht werden.
Ursprünglich sind die Bilder von Digitalkameras und haben im Schnitt etwa 3 Megapixel.

Das einfache Laden in ein TImage dauert einfch zu lange! Ich habe bereits gelesen, dass es daran liegt, dass jpegs immer zuerst komplett geladen werden müssen, bevor man sie verkleinern kann.
Daher weiß ich nicht, wie man es beschleunigen kann.

Eigentlich wäre mir alles Recht; auch ein konvertieren in ein anderes Bildformat (aber nur wenn die Qualität nicht abnimmt und die Bilder nicht viel größer werden). Bei unter 1MB/Bild sollte es bleiben (mom. sind es 750KB/Bild)

Weiß da jemand eine Lösung?
Bietet sich evtl. ein eigenes Format an, sodass in einer Datei sowohl das Bild als auch ein kleineres Vorschaubild ist?
Auf DBs würde ich gerne verzichten, damit ich ein Bild immer nur in einer Datei habe!

Vielen Dank im voraus

axelf98 25. Sep 2005 15:10

Re: Schnelles Laden von jpegs
 
Schau dir mal das an: Schnelle Vorschau aus der CodeLib Da hab ich mich mal mit beschäftigt :)

Nicolai1234 25. Sep 2005 15:25

Re: Schnelles Laden von jpegs
 
Danke, das ist genau das, was ich suchte!

Ich sollte mir angewöhnen beim Suchen die CodeLib nicht zu vergessen :wall:

Nicolai1234 25. Sep 2005 15:59

Re: Schnelles Laden von jpegs
 
Zitat:

Zitat von axelf98
Schau dir mal das an: Schnelle Vorschau aus der CodeLib Da hab ich mich mal mit beschäftigt :)

Kann es sein, dass in der Funktion ein Speicherlck ist? Je öfter ich sie anwende. desto mehr Speicher verbraucht die Anwendung...

omata 25. Sep 2005 16:07

Re: Schnelles Laden von jpegs
 
Ja, habe das gerade mal getestet (MemProof). Da sind unendlich viele Fehler drin. Die scheinen aber tiefer in der VCL zu stecken. Ich versuche du noch mehr rauszufinden...

MfG
Thorsten

Nicolai1234 25. Sep 2005 16:08

Re: Schnelles Laden von jpegs
 
Das wäre echt nett... Danke!

axelf98 25. Sep 2005 16:13

Re: Schnelles Laden von jpegs
 
Die Funktion hat 3 speicherrelavante Variablen: Ein Bitmap, ein JPEG-Image und das Result-Bitmap. Zwei davon werden am Ende freigegeben. Du musst das Result manuell freigeben, wenn du ein neues Vorschaubild zeichnest. Also einfach vorher abfragen:

Delphi-Quellcode:
 if ImageX.Picture.Bitmap <> nil then
  ImageX.picture.bitmap.freeImage;
Dann dürfte es kein Speicherleck mehr sein.

Alternative: Du schreibst die Funktion um: In eine Prozedur, die auf ein bestehendes Bild malt und nicht immer wieder ein neues erstellt...

omata 25. Sep 2005 16:17

Re: Schnelles Laden von jpegs [Speicherleck]
 
Also, diese Variante ist einfach nur böse:

Delphi-Quellcode:
  Image1.Picture.Bitmap := SchnelleVorschaubilder(opendialog1.FileName, 60);
besser ist:
Delphi-Quellcode:
var Bitmap:TBitmap;
begin
  if Opendialog1.Execute then begin
    Bitmap:=SchnelleVorschaubilder(opendialog1.FileName, 60);
    try
      Image1.Picture.Bitmap.Assign(Bitmap);
    finally
      Bitmap.free;
    end;
  end;  
end;
@axelf98

- unendlich viele Fehler war übertrieben. Aber aus dem einen Problem haben sich eben mehrere
abgeleitet und somit hat MemProof eine ziemlich lange Liste ausgegeben - sorry

- bitte ändere das doch in der CodeLib

MfG
Thorsten

CalganX 25. Sep 2005 16:31

Re: Schnelles Laden von jpegs [Speicherleck]
 
Hi,
Zitat:

Zitat von omata
- bitte ändere das doch in der CodeLib

so eben durch mich geschehen. :zwinker:

Chris

axelf98 25. Sep 2005 16:41

Re: Schnelles Laden von jpegs [Speicherleck]
 
hmm...
Kommt ganz auf die Verwendung an. Wenn man (wie ich) das für die Zuordnung und Verwaltung in einer TList nimmt, hat man kein Speicherleck. Für ein Wald und Wiesen TImage kanns dann natürlich Probleme geben. Da hab ich nicht so recht dran gedacht..


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 Uhr.
Seite 1 von 2  1 2      

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