AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Prüfen, ob Bitmap leer ist ?
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob Bitmap leer ist ?

Ein Thema von Martin K · begonnen am 5. Jul 2006 · letzter Beitrag vom 5. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#11

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:10
bitmap.free gibt den speicher frei er existiert aber freeandnil loescht direkt den inhalt.
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#12

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:12
Hi Leute.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:12
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 ?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#14

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:32
Hallo,
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
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:40
Danke für Deine Antwort

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 ?
So funktioniert wenigestes die 4. Variante aus dem ersten Posting.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#16

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 20:48
Zitat von Martin K:
Warum dann wieder auf die alte Größe setzen ?
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 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.)
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 22:12
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.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:58 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