Typen von Koordinatensystemen
Windows GDI+ verwendet drei Koordinatenbereiche: Welt, Seite und Gerät. Wenn Sie den Aufruf vornehmen, befinden sich myGraphics.DrawLine(&myPen, 0, 0, 160, 80) die Punkte, die Sie an die Graphics::D rawLine-Methode übergeben – (0, 0) und (160, 80) – im Koordinatenraum der Welt. Bevor GDI+ die Linie auf dem Bildschirm zeichnen können, durchlaufen die Koordinaten eine Sequenz von Transformationen. Eine Transformation konvertiert Weltkoordinaten in Seitenkoordinaten, und eine andere Transformation konvertiert Seitenkoordinaten in Gerätekoordinaten.
Angenommen, Sie möchten mit einem Koordinatensystem arbeiten, das seinen Ursprung im Text des Clientbereichs anstelle der oberen linken Ecke hat. Angenommen, Sie möchten, dass der Ursprung 100 Pixel vom linken Rand des Clientbereichs und 50 Pixel vom oberen Rand des Clientbereichs entfernt ist. Die folgende Abbildung zeigt ein solches Koordinatensystem.

Wenn Sie den Aufruf myGraphics.DrawLine(&myPen, 0, 0, 160, 80) ausführen, erhalten Sie die in der folgenden Abbildung dargestellte Zeile.

Die Koordinaten der Endpunkte Ihrer Linie in den drei Koordinatenbereichen sind wie folgt:
| LeerZchn | Endpunktkoordinaten |
|---|---|
| World | (0, 0) bis (160, 80) |
| Seite | (100, 50) bis (260, 130) |
| Sicherungsmedium | (100, 50) bis (260, 130) |
Beachten Sie, dass der Seitenkoordinatenraum seinen Ursprung in der linken oberen Ecke des Clientbereichs hat. Dies ist immer der Fall. Beachten Sie außerdem, dass die Gerätekoordinaten mit den Seitenkoordinaten identisch sind, da die Maßeinheit das Pixel ist. Wenn Sie die Maßeinheit auf einen anderen Als Pixel (z. B. Zoll) festlegen, unterscheiden sich die Gerätekoordinaten von den Seitenkoordinaten.
Die Transformation, die Weltkoordinaten Seitenkoordinaten zuordnt, wird als Welttransformation bezeichnet und von einem Graphics-Objekt verwaltet. Im vorherigen Beispiel ist die Welttransformation eine Übersetzung von 100 Einheiten in x-Richtung und 50 Einheiten in y-Richtung. Im folgenden Beispiel wird die Welttransformation eines Graphics-Objekts festgelegt und dann dieses Graphics-Objekt verwendet, um die in der vorherigen Abbildung gezeigte Linie zu zeichnen.
myGraphics.TranslateTransform(100.0f, 50.0f);
myGraphics.DrawLine(&myPen, 0, 0, 160, 80);
Die Transformation, die Seitenkoordinaten Gerätekoordinaten zuordnt, wird als Seitentransformation bezeichnet. Die Graphics-Klasse stellt vier Methoden zum Bearbeiten und Untersuchen der Seitentransformation bereit: Graphics::SetPageUnit, Graphics::GetPageUnit, Graphics::SetPageScaleund Graphics::GetPageScale. Die Graphics-Klasse stellt auch zwei Methoden bereit: Graphics::GetDpiX und Graphics::GetDpiY,um die horizontalen und vertikalen Punkte pro Zoll des Anzeigegeräts zu untersuchen.
Sie können die Graphics::SetPageUnit-Methode der Graphics-Klasse verwenden, um eine Maßeinheit anzugeben. Das folgende Beispiel zeichnet eine Linie von (0, 0) bis (2, 1), wobei der Punkt (2, 1) 2 Zoll nach rechts und 1 Zoll vom Punkt (0, 0) nach unten liegt.
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);
Hinweis
Wenn Sie beim Erstellen des Stifts keine Stiftbreite angeben, wird im vorherigen Beispiel eine Linie gezeichnet, die einen Zoll breit ist. Sie können die Stiftbreite im zweiten Argument für den Stiftkonstruktor angeben:
Pen myPen(Color(255, 0, 0, 0), 1/myGraphics.GetDpiX()).
Wenn angenommen wird, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung hat, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen auf:
| LeerZchn | Endpunktkoordinaten |
|---|---|
| World | (0, 0) bis (2, 1) |
| Seite | (0, 0) bis (2, 1) |
| Sicherungsmedium | (0, 0, bis (192, 96) |
Sie können die Welt- und Seitentransformationen kombinieren, um eine Vielzahl von Effekten zu erzielen. Angenommen, Sie möchten Zoll als Maßeinheit verwenden und möchten, dass der Ursprung Ihres Koordinatensystems 2 Zoll vom linken Rand des Clientbereichs und 1/2 Zoll vom oberen Rand des Clientbereichs entfernt ist. Im folgenden Beispiel werden die Welt- und Seitentransformationen eines Graphics-Objekts festgelegt und dann eine Linie von (0, 0) bis (2, 1) zeichnet.
myGraphics.TranslateTransform(2.0f, 0.5f);
myGraphics.SetPageUnit(UnitInch);
myGraphics.DrawLine(&myPen, 0, 0, 2, 1);
Die folgende Abbildung zeigt die Linie und das Koordinatensystem.

Wenn angenommen wird, dass das Anzeigegerät 96 Punkte pro Zoll in horizontaler Richtung und 96 Punkte pro Zoll in vertikaler Richtung hat, weisen die Endpunkte der Linie im vorherigen Beispiel die folgenden Koordinaten in den drei Koordinatenbereichen auf:
| LeerZchn | Endpunktkoordinaten |
|---|---|
| World | (0, 0) bis (2, 1) |
| Seite | (2, 0,5) bis (4, 1,5) |
| Sicherungsmedium | (192, 48) bis (384, 144) |