System.Drawing.Drawing2D.Matrix-klass

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

Klassen Matrix inkapslar en 3 gånger 3 affinmatris som representerar en geometrisk transformation.

I GDI+ kan du lagra en affintransformering i ett Matrix objekt. Eftersom den tredje kolumnen i en matris som representerar en affintransformering alltid är (0, 0, 1) anger du bara de sex talen i de två första kolumnerna när du skapar ett Matrix objekt. Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) Instruktionen konstruerar matrisen som visas i följande bild.

Matris.

Anmärkning

I .NET 6 och senare versioner stöds endast System.Drawing.Common-paketet, som innehåller den här typen, på Windows-operativsystem. Användning av den här typen i plattformoberoende appar orsakar kompileringstid varningar och körningsundantag. Mer information finns i System.Drawing.Common som endast stöds i Windows.

Sammansatta transformeringar

En sammansatt transformering är en sekvens med transformeringar, den ena följt av den andra. Överväg matriserna och omvandlingarna i följande lista:

Matris Omvandling
Matris A Rotera 90 grader
Matris B Skala med en faktor 2 i x-riktningen
Matris C Översätt 3 enheter i y-riktningen

Om du börjar med punkten (2, 1) - representerad av matrisen [2 1 1] - och multiplicerar med A, sedan B, sedan C, kommer punkten (2, 1) att genomgå de tre omvandlingarna i den ordning som anges.

[2 1 1]ABC = [-2 5 1]

I stället för att lagra de tre delarna av den sammansatta omvandlingen i tre separata matriser kan du multiplicera A, B och C för att få en enda 3×3-matris som lagrar hela den sammansatta omvandlingen. Anta ABC = D. Sedan ger en punkt multiplicerad med D samma resultat som en punkt multiplicerad med A, sedan B och sedan C.

[2 1 1]D = [-2 5 1]

Följande bild visar matriserna A, B, C och D.

Matriser A, B, C och D

Det faktum att matrisen för en sammansatt transformering kan bildas genom att multiplicera de enskilda transformeringsmatriserna innebär att alla sekvenser av affintransformeringar kan lagras i ett enda Matrix objekt.

Försiktighet

Ordningen på en sammansatt transformering är viktig. I allmänhet är att rotera, sedan skala och sedan förflytta inte samma sak som att skala, sedan rotera och sedan förflytta. På samma sätt är ordningen på matrisens multiplikation viktig. I allmänhet är ABC inte samma som BAC.

Klassen Matrix innehåller flera metoder för att skapa en sammansatt transformering: Multiply, Rotate, RotateAt, Scale, Shearoch Translate. I följande exempel skapas matrisen för en sammansatt transformering som först roterar 30 grader, sedan skalar med en faktor 2 i y-riktningen och översätter sedan 5 enheter i x-riktningen:

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)