![]() |
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:
Leider bin ich so langsam am Ende mit meinem Latein und hoffe auf eure Hilfe...
var Bitmap: TBitmap;
1. not Assigned(Bitmap) 2. Bitmap = nil 3. Bitmap.Empty 4. Bitmap.Width = 0 |
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.
|
Re: Prüfen, ob Bitmap leer ist ?
Zitat:
Delphi-Quellcode:
Eine andere Möglichkeit kenne ich nicht :?
Bitmap.FreeImage;
|
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 ... |
Re: Prüfen, ob Bitmap leer ist ?
Zitat:
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". |
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:
dahinter setzten, das würde gehen...
Bitmap := nil;
//oder: Bitmap.Width := 0; 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:
Dann funktioniert wenigstens die zweite Abfrage ...
Bitmap := nil;
|
Re: Prüfen, ob Bitmap leer ist ?
Zitat:
Delphi-Quellcode:
Ansonsten dümpeln etliche nicht freigegebene TBitmap-Instanzen im Speicher rum.
FreeAndNil(BmpVariable);
|
Re: Prüfen, ob Bitmap leer ist ?
Zitat:
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; |
Re: Prüfen, ob Bitmap leer ist ?
Zitat:
Mit
Delphi-Quellcode:
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).
Bmp := nil
Free löst allerdings keinen Fehler aus, wenn die Variable auf keine Klasseninstanz mehr verweist. Ergo:
Delphi-Quellcode:
FreeAndNil(BitmapVariable);
|
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:
[OT]
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); Was ist eigentlich besser: Bitmap.Free; FreeAndNil(Bitmap); :?: [/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr. |
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