Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Martin K 5. Jul 2006 16:21


Prüfen, ob Bitmap leer ist ?
 
Ich weiß nicht ob meine Frage zu einfach ist, aber hab leider noch keine Lösung gefunden.

Ich will einfach nur überprüfen, ob ein Bitmap ein Bild enthält oder nicht.

Habe folgendes schon ausprobiert, leider ohne Erfolg :(

Delphi-Quellcode:
var Bitmap: TBitmap;

1. not Assigned(Bitmap)
2. Bitmap = nil
3. Bitmap.Empty
4. Bitmap.Width = 0
Leider bin ich so langsam am Ende mit meinem Latein und hoffe auf eure Hilfe...

Khabarakh 5. Jul 2006 16:24

Re: Prüfen, ob Bitmap leer ist ?
 
Alle vier sind richtig, wenn jeweils dein Code davor dazu passt. Soll heißen, dieser muss korrigiert werden, und dazu müssten wir ihn erst einmal kennen.

Martin K 5. Jul 2006 16:26

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

Zitat von Khabarakh
Alle vier sind richtig, wenn jeweils dein Code davor dazu passt. Soll heißen, dieser muss korrigiert werden, und dazu müssten wir ihn erst einmal kennen.

Naja, das Bitmap "leere" ich mit:
Delphi-Quellcode:
Bitmap.FreeImage;
Eine andere Möglichkeit kenne ich nicht :?

markusj 5. Jul 2006 17:28

Re: Prüfen, ob Bitmap leer ist ?
 
<Müll>Dann machst du danach noch ein Bitmap := nil; und dann passt deine Abfrage ...</Müll>

mfG

Markus

EDIT: Müll korrigiert. Du musst nachdem du das Bitmap geleert hast, eine der Propertys, die du hinterher abfragen willst, auf den gewünschten Wert setzen. z.B. Bitmap.width := 0, danach zieht deine Abfrage dann ... ich kenne mich aber nicht so gut mit TBitmap aus ... es kann sein, dass dir TBitmap so eine Funktion gar nicht anbietet ...

Thorben77 5. Jul 2006 17:41

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

Zitat von markusj
Dann machst du danach noch ein Bitmap := nil; und dann passt deine Abfrage ...

Aber auch nur die 1. und die 2. (Hat sich erledigt.)

Ich glaube das, was Du suchst, ist die 3. "Variante":

[oh]Mit Empty kann festgestellt werden, ob ein Bitmap in das Bitmap-Objekt geladen oder mit Hilfe der Eigenschaft Canvas gezeichnet wurde. Wenn das Bitmap-Objekt leer ist, d.h. das Bitmap-Objekt enthält kein Bitmap, hat Empty den Wert true, ansonsten false.[/oh]

Nachtrag:
Wenn man die Breite und Höhe auf 0 setzt, dann ist Empty false. Ich fänd's aber nicht so elegant, dann zu prüfen, ob die Breite/Höhe 0 ist, Empty ist "selbsterklärender".

Martin K 5. Jul 2006 17:52

Re: Prüfen, ob Bitmap leer ist ?
 
Erstmal danke für eure Antworten :thumb:

Ich könnte natürlich, überall wo ich mein Bitmap leere noch ein
Delphi-Quellcode:
Bitmap := nil;
//oder:
Bitmap.Width := 0;
dahinter setzten, das würde gehen...

Komisch ist nur, dass dies nicht automatisch geschieht.
Dachte mit Bitmap.FreeImage, würde ein Bitmap komplett geleert werden und ich hab wieder ein leeres Bitmap (so, wie wenn ich eines neu create).

Hab mal ein bisschen rumprobiert, anscheinend bewirkt Bitmap.FreeImage überhaupt nix.
Danach ist noch dasselbe Bitmap drin wie vorher...

Laut Delphi-Hilfe wird aber das ursprünglich geladene Bild aus dem Speicher freigegeben, nur Pixelformat und Farbtiefe kann erhalten bleiben.

Meine Frage:
Wie leert/löscht ihr Bitmaps ???

Werde es jetzt vielleicht so leeren:
(das Bitmap.FreeImage komplett weglassen)
Delphi-Quellcode:
Bitmap := nil;
Dann funktioniert wenigstens die zweite Abfrage ...

Thorben77 5. Jul 2006 17:56

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

Zitat von Martin K
Werde es jetzt vielleicht so leeren:
Delphi-Quellcode:
Bitmap := nil;
Dann funktioniert wenigstens die zweite Abfrage ...

Wenn Du das umbedingt so machen willst, dann schreib wenigstens
Delphi-Quellcode:
FreeAndNil(BmpVariable);
Ansonsten dümpeln etliche nicht freigegebene TBitmap-Instanzen im Speicher rum.

Martin K 5. Jul 2006 18:01

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

Zitat von Thorben77
Wenn Du das umbedingt so machen willst, dann schreib wenigstens
Delphi-Quellcode:
FreeAndNil(BmpVariable);
Ansonsten dümpeln etliche nicht freigegebene TBitmap-Instanzen im Speicher rum.

Ähhh... Nö!
Ich habe ja das Bitmap immer noch, es soll nur kein Bild enthalten :wink:

Habe die Bitmap-Variable global, und ganz am Ende wird sie auch selbstverständlich wieder freigegeben.

Okay, es gäbe natürlich noch diese Möglichkeit, aber sowas macht man IMO nicht:
(Bitmap freigeben und gleich danach wieder neu erstellen)
Delphi-Quellcode:
FreeAndNil(Bitmap);
Bitmap := TBitmap.Create;

Thorben77 5. Jul 2006 18:11

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

Zitat von Martin K
Ähhh... Nö!

Ähhh... doch! :wink:

Mit
Delphi-Quellcode:
Bmp := nil
sagst Du, dass die Variable Bmp keiner Klasseninstanz mehr zugewiesen ist. Daher kannst Du auch später nicht mehr auf die Instanz zugreifen (und sie freigeben).

Free löst allerdings keinen Fehler aus, wenn die Variable auf keine Klasseninstanz mehr verweist.

Ergo:
Delphi-Quellcode:
FreeAndNil(BitmapVariable);

Martin K 5. Jul 2006 19:08

Re: Prüfen, ob Bitmap leer ist ?
 
Aber ich will doch, nachdem ich das Bitmap geleert habe, z.B. mit LoadFromFile wieder ein neues Bild dem Bitmap zuordnen können.
Nachdem ich das Bitmap aber mit FreeAndNil freigegeben habe, kann ich kein neues Bild mehr laden.

Ich veranschauliche mal das ganze Problem mit einer StringList anstatt einem Bitmap:
Delphi-Quellcode:
var SL: TStringList;
{...}

{Irgendwo wird die StringList erzeugt:}
SL := TStringList.Create;

{Dann wird etwas in die StringList geladen:}
SL.LoadFromFile('C:\test.txt');

{Der Inhalt der StringList wird gelöscht:}
SL.Clear; //genau das brauche ich fürs Bitmap!
//Bitmap := nil; wäre mein Vorschlag

{Es soll überprüft werden, ob die StringList leer ist:}
if SL.Count = 0 then //beim Bitmap wäre dass dann Bitmap = nil oder so

{Nachdem der Inhalt gelöscht ist, soll wieder Inhalt hinzugefügt werden:}
SL.LoadFromFile('C:\hallo.txt');

{Ganz zum Schluss wird freigegeben:}
FreeAndNil(SL);
[OT]
Was ist eigentlich besser:
Bitmap.Free;
FreeAndNil(Bitmap);
:?:
[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

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