Entwickler-Ecke

Multimedia / Grafik - ...eine Bitmap löschen (bzw. Zeichenfläche einer Bitmap)?


Popov - Di 10.02.04 00:34
Titel: ...eine Bitmap löschen (bzw. Zeichenfläche einer Bitmap)?
Mit Zeichenfläche ist hier die Canvas gemeint. Eigentlich ist das kein Tipp wie man eine Bitmap lösch, sondern die Canvas. Allerdings wollen die meisten immer wissen wie man das Bild einer Bitmap löscht. Deshalb Bitmap löschen.

Hier gibt es zwei Möglichkeiten. Beide nutzen:


Delphi-Quelltext
1:
Canvas.FillRect(Rect);                    


Wobei es, wenn man die ganze Fläche löschen will, besser so geht:


Delphi-Quelltext
1:
with Canvas do FillRect(ClipRect);                    


Ob jetzt vor Canvas Bitmap steht oder Form1 ist egal.

FillRect ist eigentlich schon der Tipp. Allerdings sollte man einige Punkte beachten, denn sonnst löscht FillRect mit irgendetwas. Es gibt die Möglichkeit entweder mit Farbe zu löschen oder mit einer Bitmap.


Mit Farbe löschen:

Löscht man mit der Farbe, dann ist die Canvas.Brush.Color Farbe dafür zuständig. Wird jetzt FillRect ausgeführt, dann wird mit der aktuellen Farbe "gelöscht", bzw. die Fläche gefüllt. Damit man keine bösen Überaschungen erlebt und mit den Farben durcheinander kommt, ist es besser das ganze über eine Prozedur zu machen. Hier merkt sich die Prozedur die alte Brush Farbe und stellt sie nach den Löschvorgang wieder zurück:

Es werden zwei Parameter erwartet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure CanvasClearCol(Canvas: TCanvas; Color: TColor);
var
  ColMemo: TColor;
  StyMemo: TBrushStyle;
begin
  with Canvas do begin
    ColMemo := Brush.Color;
    StyMemo := Brush.Style;
    Brush.Color := Color;
    Brush.Style := bsSolid;
    FillRect(ClipRect);
    Brush.Color := ColMemo;
    Brush.Style := StyMemo;
  end;
end{Popov}


Beispiel:

Formular mit roter Farbe löschen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CanvasClearCol(Form1.Canvas, clRed);
end;



Mit Bitmap löschen:

Die zweite Möglichkeit ist mit einer Bitmap zu löschen. Hier sollte die Bitmap maximal 8x8 Pixel sein:

Es werden zwei Parameter erwartet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure CanvasClearBmp(Canvas: TCanvas; Bmp: TBitmap);
begin
  with Canvas do
  try
    Brush.Bitmap := Bmp;
    FillRect(ClipRect);
  finally
    Brush.Bitmap := nil;
  end;
end;


Beispiel:

Formular mit einer Bitmap löschen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.LoadFromFile('c:\mask.bmp');
    CanvasClearBmp(Form1.Canvas, Bitmap);
    Canvas.Draw(100100, Bitmap);
  finally
    Bitmap.Free;
  end;
end{Popov}



Noch ein kleiner Hinweis zu FillRect: hat jetzt mit dem Tipp nicht zu tun, aber ist doch interresant. Gefüllt wird immer mit dem was zuletzt zugewiesen wurde. Wurde mach Bitmap eine Brush Farbe zugewiesen, dann füllt FillRect mit Farbe (bzw. mit Style Muster unter verwendung der Farbe). Wurde zuerst die Farbe zugewiesen und dann die Bitmap, dann wird mit der Bitmap gefüllt.