Typen von Koordinatensystemen

GDI+ verwendet drei Koordinatenbereiche: Global, Seite und Gerät. Globale Koordinaten sind die Koordinaten, die zum Modellieren einer bestimmten Grafikwelt verwendet und an Methoden im .NET Framework übergeben werden. Seitenkoordinaten beziehen sich auf das Koordinatensystem, das von einer Zeichenoberfläche verwendet wird, z. B. einem Formular oder Steuerelement. Gerätekoordinaten sind die Koordinaten, die von dem physischen Gerät verwendet werden, auf dem gezeichnet wird, z. B. ein Bildschirm oder ein Blatt Papier. Wenn Sie den Aufruf myGraphics.DrawLine(myPen, 0, 0, 160, 80) vornehmen, befinden sich die Punkte, die Sie an die DrawLine-Methode übergeben ((0, 0) und (160, 80)) im globalen Koordinatenbereich. Bevor GDI+ die Linie auf dem Bildschirm zeichnen kann, durchlaufen die Koordinaten eine Abfolge von Transformationen. Eine Transformation, die als globale Transformation bezeichnet wird, konvertiert globale Koordinaten in Seitenkoordinaten, und eine andere Transformation, die als Seitentransformation bezeichnet wird, konvertiert Seitenkoordinaten in Gerätekoordinaten.

Transformationen und Koordinatensysteme

Angenommen, Sie möchten mit einem Koordinatensystem arbeiten, das seinen Ursprung im Körper des Clientbereichs anstatt an der oberen linken Ecke hat. Nehmen wir beispielsweise an, dass Sie den Ursprung 100 Pixel vom linken Rand des Clientbereichs und 50 Pixel vom oberen Rand des Clientbereichs entfernt platzieren möchten. Die folgende Abbildung zeigt ein solches Koordinatensystem.

Illustration of a coordinate system.

Wenn Sie den Aufruf myGraphics.DrawLine(myPen, 0, 0, 160, 80) vornehmen, erhalten Sie die Linie, die in der folgenden Abbildung gezeigt wird.

Illustration of a line in the coordinate system.

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

Koordinatenbereich Endpunktkoordinaten
World (0, 0) bis (160, 80)
Seite (100, 50) bis (260, 130)
Sicherungsmedium (100, 50) bis (260, 130)

Beachten Sie, dass der Seitenkoordinatenbereich seinen Ursprung in der oberen linken Ecke des Clientbereichs hat, was immer der Fall sein wird. Beachten Sie außerdem, dass die Maßeinheit Pixel ist. Die Gerätekoordinaten sind mit den Seitenkoordinaten identisch. Wenn Sie die Maßeinheit auf etwas anderes als Pixel festlegen (z. B. Zoll), weichen die Gerätekoordinaten von den Seitenkoordinaten ab.

Die globale Transformation, die die globalen Koordinaten den Seitenkoordinaten zuordnet, befindet sich in der Transform-Eigenschaft der Graphics-Klasse. Im vorhergehenden Beispiel ist die globale Transformation eine Translation 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 dieses Graphics-Objekt verwendet, um die in der vorherigen Abbildung gezeigte Linie zu zeichnen:

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

Die Seitentransformation ordnet Seitenkoordinaten zu Gerätekoordinaten zu. Die Graphics-Klasse stellt die Eigenschaften PageUnit und PageScale für die Bearbeitung der Seitentransformation bereit. Die Graphics-Klasse bietet auch zwei schreibgeschützte Eigenschaften, DpiX und DpiY, um die horizontalen und vertikalen Punkte pro Zoll des Anzeigegeräts zu untersuchen.

Sie können die PageUnit-Eigenschaft der Graphics-Klasse verwenden, um eine andere Maßeinheit als Pixel anzugeben.

Hinweis

Sie können die PageUnit-Eigenschaft nicht auf World festlegen, da dies keine physische Einheit ist und eine Ausnahme verursachen wird.

Im folgenden Beispiel wird eine Linie von (0, 0) bis (2, 1) gezogen, wobei der Punkt (2, 1) bezogen auf den Punkt (0, 0) 2 Zoll (5 cm) nach rechts und 1 Zoll (2,5 cm) nach unten 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 Ihres Stifts keine Stiftstärke angeben, wird im vorherigen Beispiel eine Linie gezeichnet, die ein Zoll (2,5 cm) breit ist. Sie können die Stiftstärke im zweiten Argument für den Pen-Konstruktor angeben:

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

Wenn wir davon ausgehen, dass das Anzeigegerät in der horizontalen Richtung 96 Punkte pro Zoll und 96 Punkte pro Zoll in der vertikalen Richtung aufweist, besitzen die Endpunkte der Linie aus dem vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen:

Koordinatenbereich Endpunktkoordinaten
World (0, 0) bis (2, 1)
Seite (0, 0) bis (2, 1)
Sicherungsmedium (0, 0) bis (192, 96)

Beachten Sie, dass die Seitenkoordinaten mit den globalen Koordinaten identisch sind, da der Ursprung des globalen Koordinatenbereichs an der oberen linken Ecke des Clientbereichs liegt.

Sie können die globalen und Seitentransformationen kombinieren, um eine Vielzahl von Effekten zu erzielen. Angenommen, Sie möchten beispielsweise Zoll als Maßeinheit verwenden, und der Ursprung Ihres Koordinatensystems soll sich 2 Zoll vom linken Rand des Clientbereichs und 1/2 Zoll vom oberen Rand des Clientbereichs entfernt befinden. Im folgenden Beispiel werden die globalen und Seitentransformationen eines GraphicsObjekts festgelegt und dann eine Linie von (0, 0) bis (2, 1) gezeichnet:

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.

Illustration of a line and coordinate system.

Wenn wir davon ausgehen, dass das Anzeigegerät in der horizontalen Richtung 96 Punkte pro Zoll und 96 Punkte pro Zoll in der vertikalen Richtung aufweist, besitzen die Endpunkte der Linie aus dem vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen:

Koordinatenbereich Endpunktkoordinaten
World (0, 0) bis (2, 1)
Seite (2, 0.5) bis (4, 1.5)
Sicherungsmedium (192, 48) bis (384, 144)

Weitere Informationen