AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Handles bei Änderungen an Bitmaps
Thema durchsuchen
Ansicht
Themen-Optionen

Handles bei Änderungen an Bitmaps

Ein Thema von Bitmap · begonnen am 25. Aug 2005 · letzter Beitrag vom 26. Aug 2005
Antwort Antwort
Bitmap

Registriert seit: 25. Aug 2005
Ort: Arth
10 Beiträge
 
Delphi 7 Professional
 
#1

Handles bei Änderungen an Bitmaps

  Alt 25. Aug 2005, 17:50
Hallo

Ich arbeite an einer Anwendung welche Bitmaps animiert. Dabei wird die Grösse, Position und Aussehen des Bitmaps laufend verändert und das Bitmap anschliessend wieder neu gezeichnet. Nach einer gewissen Zeit bekomme ich die Exception EOutOfResources.
Eine Analyse mit dem Tool MemProof hat ergeben, dass bei der Veränderung der Grösse eines Bitmaps das Windows Handle neu zugewiesen wird, das alte vorher aber nicht mehr freigegeben wird.

Delphi-Quellcode:
L_Bitmap:=TBitmap.create;
{L_Bitmap.Handle = 0}

L_Bitmap.Width:=L_width;
{L_Bitmap.Handle = 173564234}
Wie kann ich dieses Verhalten verhindern?
Alex
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Handles bei Änderungen an Bitmaps

  Alt 25. Aug 2005, 17:55
So?
Delphi-Quellcode:
L_Bitmap.Free();
L_Bitmap:=TBitmap.create;
{L_Bitmap.Handle = 0}

L_Bitmap.Width:=L_width;
{L_Bitmap.Handle = 173564234}
Mach dir klar, daß du mit TBitmap.create() einen Konstruktor aufrufst ... dieser erzeugt ein komplett neues und vom alten unabhängiges Objekt. L_Bitmap ist nur ein sog. Objekt- oder Instanzenpointer. Du kannst auch temporär L_Bitmap in eine Variable selben Typs zwischenspeichern und erst nach Erzeugung des neuen Objektes freigeben ... aber auf jeden Fall freigeben.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Handles bei Änderungen an Bitmaps

  Alt 25. Aug 2005, 18:00
Hallo Bitmap,

herzlich willkommen in der Delphi-PRAXiS.

An einer Lösung deines Problems haben wir uns vor einigen Wochen schonmal versucht: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Bitmap

Registriert seit: 25. Aug 2005
Ort: Arth
10 Beiträge
 
Delphi 7 Professional
 
#4

Re: Handles bei Änderungen an Bitmaps

  Alt 25. Aug 2005, 18:15
Hallo zusammen,

Danke schon mal für die Tips. Den Beitrag für die Bitmaps habe ich vorher schon gelesen. Irgendwie sehe ich aber nicht den Hinweis, der mir bei meinem Problem weiterhilft.

Ich habe auch alle Punkte bzgl. Dormant, FreeImage, etc. eingebaut.
Nachfolgend der ganze Code:

Delphi-Quellcode:
var L_Bitmap : TBitmap;
    L_Width,L_Height: integer;

begin
L_Bitmap:=nil;
try
  L_Bitmap:=TBitmap.create;
  L_Width:=round(max(2*abs(L_VL.X-L_M.X),2*abs(L_VR.X-L_M.X)));
  L_Height:=round(max(2*abs(L_VL.Y-L_M.Y),2*abs(L_VR.Y-L_M.Y)));

  L_Bitmap.PixelFormat := pf24bit;
  L_Bitmap.Width:=L_width;
  L_Bitmap.Height:=L_Height;

  ...
  L_Bitmap.canvas.StretchDraw(Rect(0,0,BMWidth,BMHeight),BitmapOriginal);
  L_Bitmap.FreeImage;

  ...

finally
  begin
  if assigned(L_Bitmap) then
    begin
    L_Bitmap.ReleaseHandle;
    L_Bitmap.free;
    end;
  end;
end;
Wieso werden hier für L_Bitmap nicht alle Ressourcen freigegeben?
Alex
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: Handles bei Änderungen an Bitmaps

  Alt 25. Aug 2005, 18:35
Mache mal "L_Bitmap.FreeImage;" auch noch ins finally ...
  Mit Zitat antworten Zitat
Bitmap

Registriert seit: 25. Aug 2005
Ort: Arth
10 Beiträge
 
Delphi 7 Professional
 
#6

Re: Handles bei Änderungen an Bitmaps

  Alt 26. Aug 2005, 15:23
Hallo

Habe noch einiges ausprobiert und festgestellt, wenn ich die Anweisung:

L_Bitmap.ReleaseHandle;

im finally Block weglasse, Meldet mir MemProof keine Speicherlecks mehr bei den Änderungen des Bitmapobjekts.
Hat jemand eine Idee was der Grund für das, für mich jedenfalls, seltsame Verhalten sein könnte?
Alex
  Mit Zitat antworten Zitat
Antwort Antwort


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 11: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