Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Prüfen, ob Bitmap leer ist ? (https://www.delphipraxis.net/72701-pruefen-ob-bitmap-leer-ist.html)

pacman1986 5. Jul 2006 19:10

Re: Prüfen, ob Bitmap leer ist ?
 
bitmap.free gibt den speicher frei er existiert aber freeandnil loescht direkt den inhalt.

Waldteufel 5. Jul 2006 19:12

Re: Prüfen, ob Bitmap leer ist ?
 
Hi Leute.

Zitat:

Zitat von pacman1986
bitmap.free gibt den speicher frei er existiert aber freeandnil loescht direkt den inhalt.

Nö! FreeAndNil löscht die Referenz auf den Speicher.

Martin K 5. Jul 2006 19:12

Re: Prüfen, ob Bitmap leer ist ?
 
Zitat:

Zitat von pacman1986
bitmap.free gibt den speicher frei er existiert aber freeandnil loescht direkt den inhalt.

Hmm...
Und was ist in der Praxis besser ?

xaromz 5. Jul 2006 19:32

Re: Prüfen, ob Bitmap leer ist ?
 
Hallo,
Zitat:

Zitat von Martin K
Hmm...
Und was ist in der Praxis besser ?

das kommt immer darauf an. Beide Befehle machen im Grunde das Selbe. Der einzige Unterschied ist, dass die Objektvariable bei FreeAndNil auf nil gesetzt wird, während sie bei .Free weiterhin auf den (nun nicht mehr benutzten) Speicher zeigt. Wenn Du also über eine Objektreferenz entscheiden willst, ob sich dahinter auch wirklich ein gültiges Objekt verbirgt, ist FreeAndNil die richtige Wahl.
Hier mal ein Beispiel:
Delphi-Quellcode:
Bitmap := TBitmap.Create;
Bitmap.Free;
if Assigned(Bitmap) then // Assigned sagt True, weil Bitmap <> nil
  Bitmap.Width := 10; // Hier kracht's
Delphi-Quellcode:
Bitmap := TBitmap.Create;
FreeAndNil(Bitmap);
if Assigned(Bitmap) then // Assigned sagt False, weil Bitmap = nil
  Bitmap.Width := 10; // Wird nie ausgeführt
Aber jetzt mal zurück zum Thema:
TBitmap.FreeImage macht genau das, was auch in der Hilfe steht: Es gibt Speicher frei, was sich auf das Bitmap auswirken kann. Ein solcher Aufruf löscht nicht das Bitmap.

Wenn ich ein Bitmap löschen möchte, gehe ich immer so vor:
Delphi-Quellcode:
OldHeight := Bitmap.Height;
Bitmap.Height := 0;
Bitmap.Height := OldHeight;
Damit sage ich dem TBitmap, dass es bitte ein neues Bitmap (Windows-Objekt, nicht Delphi-Objekt) anlegen soll. Leider gibt es keine fertige Funktion, die sowas macht.

Gruß
xaromz

Martin K 5. Jul 2006 19:40

Re: Prüfen, ob Bitmap leer ist ?
 
Danke für Deine Antwort :thumb:

Schade, dass es so eine Funktion nich in Delphi gibt.
Naja, dann mach ich es halt einfach so:
Delphi-Quellcode:
Bitmap.Width := 0;
Bitmap.Height := 0;
Warum dann wieder auf die alte Größe setzen :gruebel: ?
So funktioniert wenigestes die 4. Variante aus dem ersten Posting.

Thorben77 5. Jul 2006 19:48

Re: Prüfen, ob Bitmap leer ist ?
 
Zitat:

Zitat von Martin K
Warum dann wieder auf die alte Größe setzen :gruebel: ?

Die alte Göße musst Du nur setzen, wenn Du auf dem Canvas der Bitmap zeichnen willst und Du 'ne bestimmte Größe brauchst.

Zitat:

Zitat von Martin K
So funktioniert wenigestes die 4. Variante aus dem ersten Posting.

Bitmap.Empty (die 3. Variante) funktioniert, wenn beide Größenangaben 0 sind, aber auch wenn Du die Größe änderst, aber noch nichts gezeichnet hast. (Ich würde Empty auch Width = 0 vorziehen.)

Martin K 5. Jul 2006 21:12

Re: Prüfen, ob Bitmap leer ist ?
 
Danke nochmal für eure Antworten!

Das "leeren" des Bitmaps mache ich jetzt, indem ich die Breite und Höhe auf 0 setze.
Die alte Größe brauch ich nicht mehr, da ich nicht mit Canvas zeichne sondern mir eine neues Bitmap über eine der Bitmap.LoadFrom...-Methoden hole.

Das Überprüfen, ob das Bitmap leer ist, mache ich jetzt mit Bitmap.Empty.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 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