Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GDI+ verwendet drei Koordinatenräume: Welt, Seite und Gerät. Weltkoordinaten sind die Koordinaten, die zum Modellieren einer bestimmten Grafikwelt verwendet werden, und die Koordinaten, die Sie an Methoden im .NET Framework übergeben. 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, wie zum Beispiel auf einem Bildschirm oder Blatt Papier. Wenn Sie den Aufruf myGraphics.DrawLine(myPen, 0, 0, 160, 80)durchführen, befinden sich die Punkte, die Sie an die DrawLine-Methode übergeben –(0, 0) und (160, 80)– im Weltkoordinatenbereich. Bevor GDI+ die Linie auf dem Bildschirm zeichnen kann, durchlaufen die Koordinaten eine Sequenz von Transformationen. Eine Transformation, die als Welttransformation bezeichnet wird, konvertiert Weltkoordinaten 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 der Ursprung 100 Pixel vom linken Rand des Clientbereichs und 50 Pixel vom oberen Rand des Clientbereichs entfernt sein soll. Die folgende Abbildung zeigt ein solches Koordinatensystem.
Wenn Sie den Anruf myGraphics.DrawLine(myPen, 0, 0, 160, 80)tätigen, erhalten Sie die Linie, die in der folgenden Abbildung gezeigt wird.
Die Koordinaten der Endpunkte Ihrer Linie in den drei Koordinatenräumen sind wie folgt:
| Koordinatenbereich | Endpunktkoordinaten |
|---|---|
| Welt | (0, 0) bis (160, 80) |
| Seite | (100, 50) bis (260, 130) |
| Gerät | (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 Gerätekoordinaten, da die Maßeinheit das Pixel ist, mit den Seitenkoordinaten identisch sind. Wenn Sie die Maßeinheit auf etwas anderes als Pixel festlegen (z. B. Zoll), unterscheiden sich die Gerätekoordinaten von den Seitenkoordinaten.
Die Welttransformation, die die Weltkoordinaten 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 das Pixel anzugeben.
Hinweis
Sie können die eigenschaft PageUnit nicht auf Worldfestlegen, da dies keine physische Einheit ist und eine Ausnahme verursacht.
Das folgende Beispiel zeichnet eine Linie von (0, 0) bis (2, 1), wobei der Punkt (2, 1) 2 Zoll nach rechts und 1 Zoll von dem Punkt (0, 0) 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 des Stifts keine Stiftbreite angeben, zeichnet das vorherige Beispiel eine Linie, die ein Zoll 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 davon ausgegangen wird, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung aufweist, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenräumen auf:
| Koordinatenbereich | Endpunktkoordinaten |
|---|---|
| Welt | (0, 0) bis (2, 1) |
| Seite | (0, 0) bis (2, 1) |
| Gerät | (0, 0) bis (192, 96) |
Beachten Sie, dass die Seitenkoordinaten mit den Weltkoordinaten identisch sind, da der Ursprung des Weltkoordinatenbereichs an der oberen linken Ecke des Clientbereichs liegt.
Sie können die Welt- 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 Welt- 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 das Linien- und Koordinatensystem.
Wenn davon ausgegangen wird, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung aufweist, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenräumen auf:
| Koordinatenbereich | Endpunktkoordinaten |
|---|---|
| Welt | (0, 0) bis (2, 1) |
| Seite | (2, 0,5) bis (4, 1,5) |
| Gerät | (192, 48) bis (384, 144) |
Siehe auch
.NET Desktop feedback