AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Schnelles Laden von jpegs [Speicherleck]
Thema durchsuchen
Ansicht
Themen-Optionen

Schnelles Laden von jpegs [Speicherleck]

Ein Thema von Nicolai1234 · begonnen am 25. Sep 2005 · letzter Beitrag vom 28. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#1

Schnelles Laden von jpegs [Speicherleck]

  Alt 25. Sep 2005, 16:03
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
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 16:10
Schau dir mal das an: Schnelle Vorschau aus der CodeLib Da hab ich mich mal mit beschäftigt
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 16:25
Danke, das ist genau das, was ich suchte!

Ich sollte mir angewöhnen beim Suchen die CodeLib nicht zu vergessen
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 16:59
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...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 17:07
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
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 17:08
Das wäre echt nett... Danke!
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Schnelles Laden von jpegs

  Alt 25. Sep 2005, 17:13
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...
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Schnelles Laden von jpegs [Speicherleck]

  Alt 25. Sep 2005, 17:17
Also, diese Variante ist einfach nur böse:

  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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Schnelles Laden von jpegs [Speicherleck]

  Alt 25. Sep 2005, 17:31
Hi,
Zitat von omata:
- bitte ändere das doch in der CodeLib
so eben durch mich geschehen.

Chris
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Schnelles Laden von jpegs [Speicherleck]

  Alt 25. Sep 2005, 17:41
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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