Używanie transformacji świata

Transformacja światowa jest właściwością Graphics klasy . Liczby określające transformację Matrix świata są przechowywane w obiekcie, który reprezentuje macierz 3×3. Klasy Matrix i Graphics mają kilka metod ustawiania liczb w światowej macierzy transformacji.

Różne typy przekształceń

W poniższym przykładzie kod najpierw tworzy prostokąt 50×50 i lokalizuje go w miejscu początkowym (0, 0). Źródło znajduje się w lewym górnym rogu obszaru klienta.

Rectangle rect = new Rectangle(0, 0, 50, 50);
Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
e.Graphics.DrawRectangle(pen, rect);
Dim rect As New Rectangle(0, 0, 50, 50)
Dim pen As New Pen(Color.FromArgb(128, 200, 0, 200), 2)
e.Graphics.DrawRectangle(pen, rect)

Poniższy kod stosuje transformację skalowania, która rozszerza prostokąt o współczynnik 1,75 w kierunku x i zmniejsza prostokąt o współczynnik 0,5 w kierunku y:

e.Graphics.ScaleTransform(1.75f, 0.5f);
e.Graphics.DrawRectangle(pen, rect);
e.Graphics.ScaleTransform(1.75F, 0.5F)
e.Graphics.DrawRectangle(pen, rect)

Wynik jest prostokątem dłuższym w kierunku x i krótszym w kierunku y niż oryginalny.

Aby obrócić prostokąt zamiast go skalować, użyj następującego kodu:

e.Graphics.ResetTransform();
e.Graphics.RotateTransform(28); // 28 degrees
e.Graphics.DrawRectangle(pen, rect);
e.Graphics.ResetTransform()
e.Graphics.RotateTransform(28) ' 28 degrees
e.Graphics.DrawRectangle(pen, rect)

Aby przetłumaczyć prostokąt, użyj następującego kodu:

e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(150, 150);
e.Graphics.DrawRectangle(pen, rect);
e.Graphics.ResetTransform()
e.Graphics.TranslateTransform(150, 150)
e.Graphics.DrawRectangle(pen, rect)

Zobacz też