Delphi-PRAXiS
Seite 2 von 2     12   

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 22:00

Re: Schnelles Laden von jpegs [Speicherleck]
 
Das Speicherleck mit dem Result ist jetzt aber noch nicht behoben worden, oder?

Die Lösung vn oben, verstehe ich nicht so ganz...

axelf98 25. Sep 2005 23:17

Re: Schnelles Laden von jpegs [Speicherleck]
 
Bastel es doch um, so dass erst gar keine Speicherlecks mehr entstehen können:

Delphi-Quellcode:
procedure SchnelleVorschaubilder(Datei: String; Groesse: Integer; Ziel: TBitmap);
var
  JPG: TJPEGImage;
  Bitm: Tbitmap;
  Hoehe, Weite, X: integer;
  Verh: Double;
begin
  JPG := TJPEGImage.Create;
  Bitm := TBitmap.Create;
  try
    JPG.LoadFromFile(Datei);
    JPG.Scale := jsEighth;
    Bitm.Assign(JPG);
    if (Bitm.Height > 0) AND (Bitm.Width > 0) then
    begin
      Verh := Bitm.Width/Bitm.Height;
      Ziel.Width := Groesse;
      Ziel.Height := Groesse;
      if Verh >= 1 then
      begin
        Hoehe := Round(Groesse/Verh);
        x := round((Groesse-Hoehe)/2);
        Ziel.canvas.StretchDraw(Rect(0,X,Groesse,Hoehe+X),Bitm);
      end
      else
      begin
        Weite := Round(Groesse*Verh);
        X := round((Groesse-Weite)/2);
        Ziel.Canvas.StretchDraw(Rect(x,0,Weite+x,Groesse),Bitm);
      end;
    end;
  finally
    FreeandNil(Bitm);
    FreeandNil(JPG);
  end;
end;

arnold mueller 28. Sep 2005 21:41

Re: Schnelles Laden von jpegs [Speicherleck]
 
Man kann auch das Bitmap Property von TJPegImage nutzen indem man es in einer Ableitung veröffentlicht.

TAdvJPegIMage=class(TJPegImage)
public
property Bitmap: TBitmap;
end;

Bezogen auf die ursprüngliche Frage bedeutet das:

1. Bild laden
2. Property Scale setzen
3. Bitmap in eine Paintbox malen


img: TAdvJPegIMage;

img.loadfromfile(...);
img.scale := "jsViertel" -> weiss gerade nicht die genaue Bezeichnung
paintbox1.cancas.draw(0,0,img.bitmap.handle) -> so im Prinzip


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

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