![]() |
Vorschaubilder ähnlich schnell wie Win-XP erstellen
Hallo!
Ich programmiere grad ein Fotopräsentationsprogramm, das kleine Vorschaubilder zeigen soll. Ich habe es schon geschafft, eine recht flotte Vorschau zu realisieren, aber es ist noch lang nicht auf XP-Niveau. Mein Code:
Delphi-Quellcode:
Hat von euch einer eine Idee, wie man die Bildverkleinerung optimieren kann?
function TFotoShow.VorschauladenEinzeln(sFoto:TFoto):boolean; //TFoto ist ein Record mit einem TBitmap
var LadImage: Timage; Verh: Double; hoehe, weite,x: integer; begin result := true; try LadImage := TImage.Create(nil); LadImage.Picture.LoadFromFile(sFoto.FileScr); if (LadImage.Picture.Width > 0) AND (LadImage.Picture.Height > 0)then begin Verh := LadImage.Picture.Width/LadImage.Picture.Height; sFoto.Vorschau.Width := VorschauGr; sFoto.Vorschau.Height:= VorschauGr; if Verh >= 1 then begin hoehe := Round(VorschauGr/Verh); x := round((VorschauGr-hoehe)/2); sFoto.Vorschau.Canvas.StretchDraw(Rect(0,x,VorschauGr,hoehe+x),LadImage.Picture.Graphic); // das ist das langsamste end ELSE begin weite := Round(VorschauGr*Verh); x := round((VorschauGr-weite)/2); sFoto.Vorschau.Canvas.StretchDraw(Rect(x,0,weite+x,VorschauGr),LadImage.Picture.Graphic); // das ist das langsamste end; end ELSE begin result := false; Fehlerprotokoll.Add('Fehler bei den Bildgrößen bei "'+sFoto.FileScr+'"'); end; LadImage.Free; except Fehlerprotokoll.Add('Kann keine Vorschau erzeugen von "'+sFoto.FileScr+'"'); result := false; if LadImage <> nil then LadImage.Free; end; end; Grüße :coder: |
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Hallo axelf98,
wenn du dir die versteckten Dateien im einem der Ordner mit Bildvorschau anzeigen laesst, siehst du dass Windows diese Vorschaubilder in einer db-Datei abspeichert. Nur dadurch wird es so schnell :zwinker: Zu deinem Code: ich empfehle dir die Verwendung von ![]() Greetz alcaeus |
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Zitat:
|
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
das täuscht, selbst ohne thumbs.db braucht windows eine Zeit. Es kommt dir nur so schnell vor weil das ganze in einem Thread passiert und du die ersten bilder siehst bevor der Vorgang komplette abgeschlossen ist. Soll heißen - du siehst im Explorer ca. 12 Vorschaubilder und diese sind recht schnell erstellt, im Hintergrund werden dann die restlichen Bilder die im nicht sichtbaaren Bereich sind erstellt.
|
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Hi :hello:
Ich hab es nach einigem Probieren geschafft, einen Code zu "schreiben", der Thumbnails, also Vorschaubilder schnell (ähnlich wie in Windows XP) erstellt. Der braucht ungefähr 7 Sekunden für 60 6-Megapixel-Bilder für beliebig große Thumbs auf einem 1,6 Ghz Centrino. Folgend der Code:
Delphi-Quellcode:
Vielleicht für einen Eintrag in die Code-Lib zu gebrauchen? :drunken:
procedure ...
Extention: String; LadBitmap, Vorschau: TBitmap; jpg: TJPEGImage; begin Extention := Ansilowercase(Extractfileext(sFoto.FileScr)); if (Extention = '.jpg') OR (Extention = '.jpeg') then begin /// JPGS schnell!!!! --------------------------------- LadBitmap := TBitmap.Create; Vorschau := TBitmap.Create; jpg := TJPEGImage.create; jpg.LoadFromFile(sFoto.FileScr); jpg.Scale := jsEighth; // schnell, da nur 1/8 der Größe LadBitmap.Assign(jpg); // rüberkopieren Vorschau.Canvas.StretchDraw(Rect(0,0,VorschauGr,VorschauGr),LadBitmap); jpg.Free; LadBitmap.Free; end; |
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Zitat:
![]() Greetz alcaeus |
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Schon passiert!
|
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Aber dann bitte mit Resoucenschutzblöcken und "FreeAndNil" anstelle von "Free" danke. ;)
Bsp:
Delphi-Quellcode:
CreateBitmap;
try DoSomething; finally FreeAndNil(); end; Nachtrag: AH, hast du nun ja drin. :thumb: |
Re: Vorschaubilder ähnlich schnell wie Win-XP erstellen
Das geht bei weitem schneller :)
In den heutigen JPEG's der DigiCam's sind parallel zum Bild im Header ein Thumbnail gespeichert. Üblicherweise hat dieses eine Größe von 160*80 Pixel oä. Also schon bei der Erzeugung der rießigen JPEG erzeugt die DigiCam auch ein Thumbnail und speichert beides in eine JPEG Datei. Hier im Forum müsstest du nach EXIF suchen und auf einen Source jeweils von Luckie und einem von mir stoßen. Beide können dieses Thumbnail extrahieren. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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 by Thomas Breitkreuz