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 1 von 2  1 2      
Benutzerbild von Martin K
Martin K

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

Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 16:21
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...
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 16:24
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 16:26
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:
Bitmap.FreeImage; Eine andere Möglichkeit kenne ich nicht
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#4

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 17:28
<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 ...
Markus
  Mit Zitat antworten Zitat
Thorben77

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

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 17:41
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".
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 17:52
Erstmal danke für eure Antworten

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)
Bitmap := nil; Dann funktioniert wenigstens die zweite Abfrage ...
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
 
#7

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 17:56
Zitat von Martin K:
Werde es jetzt vielleicht so leeren:
Bitmap := nil; Dann funktioniert wenigstens die zweite Abfrage ...
Wenn Du das umbedingt so machen willst, dann schreib wenigstens FreeAndNil(BmpVariable); Ansonsten dümpeln etliche nicht freigegebene TBitmap-Instanzen im Speicher rum.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 18:01
Zitat von Thorben77:
Wenn Du das umbedingt so machen willst, dann schreib wenigstens 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

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;
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
 
#9

Re: Prüfen, ob Bitmap leer ist ?

  Alt 5. Jul 2006, 18:11
Zitat von Martin K:
Ähhh... Nö!
Ähhh... doch!

Mit 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: FreeAndNil(BitmapVariable);
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

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

Re: Prüfen, ob Bitmap leer ist ?

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


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 04:10 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