zu www.bildungsgueter.de nächster Abschnitt zur Inhaltsübersicht des Kapitels vorheriger Abschnitt

Graphics: Rechnen mit Rechtecken

Gelegentlich ist es erforderlich,

Eine verkleinerte Kopie brauchst du zum Beispiel, wenn du den Darstellungsbereich einer Zeichenebene nicht voll ausnutzen möchtest, sondern allseitig einen Rand freilassen willst. Für die einfache Lösung dieser Aufgabe verwendest du die Methode Inflate(). Inflate() ist eine statische Methode in den Klassen Rectangle und RectangleF.

Eine vergrößerte Kopie herstellen

Beispiel für Inflate():

Rectangle rechteck = new Rectangle(new Point(100, 100), new Size(200, 100));
Rectangle r = Rectangle.Inflate(rechteck, 20, 40);

Hier wird ein Rechteck in der Waagerechten zu beiden Seiten um je 20 Pixel vergrößert; in der Senkrechten beträgt die Vergrößerung nach oben und unten je 40 Pixel. Das neue Rechteck entspricht genau diesem:

Rectangle rechteck = new Rectangle(new Point(80, 60), new Size(240, 180));

Die Zeichnung zeigt die Wirkung der Methode Inflate() im angegebenen Beispiel. Das ursprüngliche Rechteck ist schwarz gezeichnet, das vergrößerte Rechteck rot:

Mit "Inflate()" vergrö%szlig;ertes Rechteck

Wenn du die in diesem Beispiel erklärte Wirkung von Inflate() selbst ausprobieren willst, verwendest du dieses Programmstück:

  // Herstellen der Rechtecke
Rectangle r1 = new Rectangle(new Point(100, 100), new Size(200, 100));
Rectangle r2 = Rectangle.Inflate(r1, 20, 40);

  // Herstellen eines schwarzen Stiftes
using (Pen stift = new Pen(Color.Black, 1.0f))
{
    g.DrawRectangle(stift, r1);
    stift.Color = Color.Red;   //  Stiftfarbe ändern
    g.DrawRectangle(stift, r2);
}

In dem gezeigten Beispiel wird die Methode Inflate an die Klasse Rectangle gesendet. Methoden, die in dieser Weise aufzurufen sind, werden statische Methoden genannt. Das Rechteck, von dem eine vergrößerte Kopie hergestellt werden soll, wird der statischen Methode als Argument übergeben.

Eine verkleinerte Kopie herstellen

Negative Korrekturwerte in Inflate() bewirken die Herstellung eines verkleinerten Rechtecks:

Rectangle rechteck = new Rectangle(new Point(100, 100), new Size(200, 100));
Rectangle r = Rectangle.Inflate(rechteck, -20, -40);

Hier wird ein Rechteck in der Waagerechten zu beiden Seiten um je 20 Pixel verkleinert; in der Senkrechten beträgt die Verkleinerung nach oben und unten je 40 Pixel. Das neue Rechteck entspricht genau diesem:

Rectangle rechteck = new Rectangle(new Point(120, 140), new Size(160, 20));

Die Zeichnung zeigt die Wirkung der Methode Inflate() im angegebenen Beispiel. Das ursprüngliche Rechteck ist schwarz gezeichnet, das verkleinerte Rechteck rot:

Mit "Inflate()" verkleinertes Rechteck

Wenn du die in diesem Beispiel erklärte Wirkung von Inflate() selbst ausprobieren willst, verwendest du dieses Programmstück:

Rectangle r1 = new Rectangle(new Point(100, 100), new Size(200, 100));
Rectangle r2 = Rectangle.Inflate(r1, -20, -40);

using (Pen stift = new Pen(Color.Black, 1.0f))
{
    g.DrawRectangle(stift, r1);
    stift.Color = Color.Red;
    g.DrawRectangle(stift, r2);
}

In späteren Beispielen wirst du Inflate() mit negativen Korrekturwerten häufiger verwenden.

Wenn du die Methode Inflate mit einem positiven und einem negativen Korrekturwert aufrufst, erzeugst du ein neues Rechteck, da längs einer Koordinate vergrößert und längs der anderen Koordinate verkleinert wird.


Rechtecke verkleinern oder vergrößern

Die statische Methode Inflate erzeugt eine Kopie eines gegebenen Rechtecks. Die Position und die Größe des kopierten Rechtecks werden ver&aUml;ndert; das gegebene Rechteck bleibt unverändert.

Es ist auch möglich, die Position und die Größe eines Rechtecks zu verändern, ohne eine Kopie herzustellen. Die Methode, die du zu diesem Zweck verwendest, heißt ebenfalls, Inflate, sie wird aber an das Rechteck gesendet, das du verändern möchtest:

Ein Rechteck vergrößern

Rectangle rechteck = new Rectangle(new Point(100, 100), new Size(200, 100));
rechteck.Inflate(20, 40);

Ein Rechteck verkleinern

Rectangle rechteck = new Rectangle(new Point(100, 100), new Size(200, 100));
rechteck.Inflate(-20, -40);

Zusammenfassung

Es gibt zwei Methoden mit dem Namen Inflate, die sorgfältig zu unterscheiden sind:


vorheriger Abschnitt zur Inhaltsübersicht des Kapitels nächster Abschnitt