Typen von Koordinatensystemen

Aktualisiert: November 2007

In GDI+ werden drei Koordinatensysteme verwendet: Global, Seite und Gerät. Globale Koordinaten sind Koordinaten zum Entwurf einer bestimmten Grafikumgebung und werden an Methoden in .NET Framework übergeben. Seitenkoordinaten beziehen sich auf das von einer Zeichnungsoberfläche, z. B. einem Formular oder Steuerelement, verwendete Koordinatensystem. Gerätekoordinaten sind die von einem physikalischen Zeichengerät, z. B. einem Bildschirm oder Blatt Papier, verwendeten Koordinaten. Wenn Sie den Aufruf myGraphics.DrawLine(myPen, 0, 0, 160, 80) ausführen, befinden sich die an die DrawLine-Methode übergebenen Punkte – (0, 0) und (160, 80) – im globalen Koordinatensystem. Bevor GDI+ die Linie auf dem Bildschirm zeichnen kann, durchlaufen die Koordinaten eine Sequenz von Transformationen. Durch eine Transformation, die so genannte globale Transformation, werden globale Koordinaten in Seitenkoordinaten konvertiert, und durch eine andere Transformation, die so genannte Seitentransformation, werden Seitenkoordinaten in Gerätekoordinaten konvertiert.

Transformationen und Koordinatensysteme

Angenommen, Sie möchten ein Koordinatensystem verwenden, dessen Ursprung sich innerhalb des Clientbereichs befindet und nicht in der linken oberen Ecke. Nehmen wir außerdem an, der Ursprung soll 100 Pixel vom linken Rand des Clientbereichs entfernt und 50 Pixel vom oberen Rand des Clientbereichs entfernt liegen. Die folgende Abbildung zeigt ein solches Koordinatensystem.

Wenn Sie den Aufruf myGraphics.DrawLine(myPen, 0, 0, 160, 80) ausführen, wird die in der folgenden Abbildung dargestellte Linie ausgegeben.

Die Koordinaten der Endpunkte der Linie lauten in den drei Koordinatensystemen wie folgt:

Global

(0, 0) bis (160, 80)

Seite

(100, 50) bis (260, 130)

Gerät

(100, 50) bis (260, 130)

Beachten Sie, dass der Ursprung des Seitenkoordinatensystems in der linken oberen Ecke des Clientbereichs liegt. Dies ist immer der Fall. Beachten Sie außerdem, dass die Gerätekoordinaten die gleichen sind wie die Seitenkoordinaten, da die Maßeinheit Pixel lautet. Wenn Sie die Maßeinheit ändern (z. B. auf Zoll), weichen die Gerätekoordinaten von den Seitenkoordinaten ab.

Die globale Transformation, bei der eine Zuordnung von globalen Koordinaten und Seitenkoordinaten stattfindet, wird in der Transform-Eigenschaft der Graphics-Klasse gespeichert. Im obigen Beispiel ist die globale Transformation eine Verschiebung um 100 Einheiten in x‑Richtung und 50 Einheiten in y‑Richtung. Im folgenden Beispiel wird die globale Transformation eines Graphics-Objekts festgelegt und dann mithilfe dieses Graphics-Objekts die in der obigen Abbildung dargestellte Linie gezeichnet:

myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)

myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);

Bei der Seitentransformation findet eine Zuordnung von Seiten- und Gerätekoordinaten statt. Die Graphics-Klasse stellt die Eigenschaften PageUnit und PageScale zum Bearbeiten der Seitentransformation bereit. Die Graphics-Klasse stellt außerdem die beiden schreibgeschützten Eigenschaften DpiX und DpiY bereit, mit denen der horizontale und vertikale dpi-Wert (Punkte pro Zoll) des Anzeigegeräts untersucht wird.

Sie können mithilfe der PageUnit-Eigenschaft der Graphics-Klasse eine andere Maßeinheit als Pixel angeben.

Hinweis:

Die PageUnit-Eigenschaft kann nicht auf World festgelegt werden, da dies keine physische Komponente ist und daher eine Ausnahme ausgelöst würde.

Im folgenden Beispiel wird eine Linie von (0, 0) nach (2, 1) gezogen, wobei der Punkt (2, 1) 2 Zoll rechts vom Punkt (0, 0) und 1 Zoll darunter liegt:

myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
Hinweis:

Wenn Sie beim Erstellen des Stiftes keine Stiftbreite angeben, wird im obigen Beispiel eine Linie mit einer Breite von 1 Zoll gezeichnet. Sie können die Stiftbreite im zweiten Argument für den Pen-Konstruktor angeben:

Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)

Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);

Unter der Annahme, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung anzeigt, haben die Endpunkte der Linie im obigen Beispiel in den drei Koordinatensystemen die folgenden Koordinaten:

Global

(0, 0) bis (2, 1)

Seite

(0, 0) bis (2, 1)

Gerät

(0, 0) bis (192, 96)

Da sich der Ursprung des globalen Koordinatensystems in der linken oberen Ecke des Clientbereichs befindet, sind die Seitenkoordinaten mit den globalen Koordinaten identisch.

Sie können die globale Transformation und die Seitentransformation kombinieren, um verschiedenste Effekte zu erzielen. Nehmen wir beispielsweise an, Sie möchten als Maßeinheit Zoll verwenden, und der Ursprung des Koordinatensystems soll 2 Zoll vom linken Rand des Clientbereichs und 1/2 Zoll vom oberen Rand des Clientbereichs entfernt liegen. Im folgenden Beispiel wird die globale Transformation und die Seitentransformation eines Graphics-Objekts festgelegt und anschließend eine Linie von (0, 0) nach (2, 1) gezogen:

myGraphics.TranslateTransform(2, 0.5F)
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)

myGraphics.TranslateTransform(2, 0.5f);
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);

Die folgende Abbildung zeigt die Linie und das Koordinatensystem.

Unter der Annahme, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung anzeigt, haben die Endpunkte der Linie im obigen Beispiel in den drei Koordinatensystemen die folgenden Koordinaten:

Global

(0, 0) bis (2, 1)

Seite

(2, 0,5) bis (4, 1,5)

Gerät

(192, 48) bis (384, 144)

Siehe auch

Konzepte

Matrixdarstellung von Transformationen

Weitere Ressourcen

Koordinatensysteme und Transformationen