Typy systemów współrzędnych
GDI+ używa trzech przestrzeni współrzędnych: świata, strony i urządzenia. Współrzędne świata są współrzędnymi używanymi do modelowania określonego świata graficznego i są współrzędnymi, które są używane do metod w .NET Framework. Współrzędne strony odnoszą się do układu współrzędnych używanego przez powierzchnię rysunkową, taką jak formularz lub kontrolka. Współrzędne urządzenia to współrzędne używane przez rysowane urządzenie fizyczne, takie jak ekran lub arkusz papieru. Po wywołaniu metody myGraphics.DrawLine(myPen, 0, 0, 160, 80)punkty, które należy DrawLine przekazać do metody —(0, 0) i (160, 80)— znajdują się w przestrzeni współrzędnych świata. Zanim GDI+ narysować linię na ekranie, współrzędne przechodzą przez sekwencję przekształceń. Jedno przekształcenie, nazywane transformacją świata, konwertuje współrzędne świata na współrzędne strony, a drugie przekształcenie, nazywane przekształceniem strony, konwertuje współrzędne strony na współrzędne urządzenia.
Przekształcenia i systemy współrzędnych
Załóżmy, że chcesz pracować z układem współrzędnych, który ma swoje źródło w treści obszaru klienta, a nie w lewym górnym rogu. Załóżmy na przykład, że chcesz, aby źródło było 100 pikseli od lewej krawędzi obszaru klienta i 50 pikseli od góry obszaru klienta. Na poniższej ilustracji przedstawiono taki układ współrzędnych.
Po wywołaniu polecenia myGraphics.DrawLine(myPen, 0, 0, 160, 80)otrzymasz wiersz pokazany na poniższej ilustracji.
Współrzędne punktów końcowych linii w trzech odstępach współrzędnych są następujące:
| Przestrzeń współrzędnych | Współrzędne punktu końcowego |
|---|---|
| Świat | (0, 0) do (160, 80) |
| Strona | (100, 50) do (260, 130) |
| Urządzenie | (100, 50) do (260, 130) |
Zwróć uwagę, że obszar współrzędnych strony ma swoje źródło w lewym górnym rogu obszaru klienta; Będzie to zawsze mieć miejsce. Należy również zauważyć, że ponieważ jednostką miary jest piksel, współrzędne urządzenia są takie same jak współrzędne strony. Jeśli ustawisz jednostkę miary na wartość inną niż piksele (na przykład cale), współrzędne urządzenia będą się różnić od współrzędnych strony.
Przekształcenie świata, które mapuje współrzędne świata na współrzędne strony, jest przechowywane we Transform właściwości klasy Graphics . W poprzednim przykładzie transformacja świata to translowanie 100 jednostek w kierunku x i 50 jednostek w kierunku y. Poniższy przykład ustawia przekształcenie świata obiektu, Graphics a następnie Graphics używa tego obiektu do narysowania linii pokazanej na poprzedniej ilustracji:
myGraphics.TranslateTransform(100, 50);
myGraphics.DrawLine(myPen, 0, 0, 160, 80);
myGraphics.TranslateTransform(100, 50)
myGraphics.DrawLine(myPen, 0, 0, 160, 80)
Przekształcenie strony mapuje współrzędne strony na współrzędne urządzenia. Klasa Graphics udostępnia właściwości PageUnit i PageScale służące do manipulowania przekształcaniem strony. Klasa Graphics udostępnia również dwie właściwości tylko do odczytu i DpiXDpiY, do badania poziomych i pionowych kropek na cal urządzenia wyświetlającego.
Właściwość klasy umożliwia PageUnit określenie Graphics jednostki miary innej niż piksel.
Uwaga
Nie można ustawić właściwości PageUnit na Worldwartość , ponieważ nie jest to jednostka fizyczna i spowoduje wyjątek.
Poniższy przykład rysuje linię od (0, 0) do (2, 1), gdzie punkt (2, 1) jest 2 cale w prawo i 1 cal w dół od punktu (0, 0):
myGraphics.PageUnit = GraphicsUnit.Inch;
myGraphics.DrawLine(myPen, 0, 0, 2, 1);
myGraphics.PageUnit = GraphicsUnit.Inch
myGraphics.DrawLine(myPen, 0, 0, 2, 1)
Uwaga
Jeśli podczas konstruowania pióra nie określisz szerokości pióra, poprzedni przykład narysuje linię o szerokości jednego cala. Szerokość pióra można określić w drugim argumentze konstruktora Pen :
Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX);
Dim myPen As New Pen(Color.Black, 1 / myGraphics.DpiX)
Jeśli założymy, że urządzenie wyświetlające ma 96 punktów na cal w kierunku poziomym i 96 kropek na cal w kierunku pionowym, punkty końcowe linii w poprzednim przykładzie mają następujące współrzędne w trzech odstępach współrzędnych:
| Przestrzeń współrzędnych | Współrzędne punktu końcowego |
|---|---|
| Świat | (0, 0) do (2, 1) |
| Strona | (0, 0) do (2, 1) |
| Urządzenie | (0, 0) do (192, 96) |
Należy pamiętać, że ponieważ początek obszaru współrzędnych świata znajduje się w lewym górnym rogu obszaru klienta, współrzędne strony są takie same jak współrzędne świata.
Możesz połączyć przekształcenia świata i strony, aby uzyskać różne efekty. Załóżmy na przykład, że chcesz użyć cali jako jednostki miary i chcesz, aby źródło układu współrzędnych było 2 cale od lewej krawędzi obszaru klienta i 1/2 cala od góry obszaru klienta. Poniższy przykład ustawia przekształcenia świata i strony obiektu, a Graphics następnie rysuje linię od (0, 0) do (2, 1):
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)
Na poniższej ilustracji przedstawiono linię i układ współrzędnych.
Jeśli założymy, że urządzenie wyświetlające ma 96 punktów na cal w kierunku poziomym i 96 kropek na cal w kierunku pionowym, punkty końcowe linii w poprzednim przykładzie mają następujące współrzędne w trzech odstępach współrzędnych:
| Przestrzeń współrzędnych | Współrzędne punktu końcowego |
|---|---|
| Świat | (0, 0) do (2, 1) |
| Strona | (2, 0,5) do (4, 1,5) |
| Urządzenie | (192, 48) do (384, 144) |