![]() |
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 |
Re: Schnelles Laden von jpegs
Schau dir mal das an:
![]() |
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: |
Re: Schnelles Laden von jpegs
Zitat:
|
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 |
Re: Schnelles Laden von jpegs
Das wäre echt nett... Danke!
|
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:
Dann dürfte es kein Speicherleck mehr sein.
if ImageX.Picture.Bitmap <> nil then
ImageX.picture.bitmap.freeImage; Alternative: Du schreibst die Funktion um: In eine Prozedur, die auf ein bestehendes Bild malt und nicht immer wieder ein neues erstellt... |
Re: Schnelles Laden von jpegs [Speicherleck]
Also, diese Variante ist einfach nur böse:
Delphi-Quellcode:
besser ist:
Image1.Picture.Bitmap := SchnelleVorschaubilder(opendialog1.FileName, 60);
Delphi-Quellcode:
@axelf98
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; - 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 |
Re: Schnelles Laden von jpegs [Speicherleck]
Hi,
Zitat:
Chris |
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 01:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz