System.Drawing.Drawing2D.Matrix classe

Este artigo fornece observações complementares à documentação de referência para essa API.

A Matrix classe encapsula uma matriz afim 3 por 3 que representa uma transformação geométrica.

No GDI+, você pode armazenar uma transformação afim em um Matrix objeto. Como a terceira coluna de uma matriz que representa uma transformação afim é sempre (0, 0, 1), você especifica apenas os seis números nas duas primeiras colunas ao construir um Matrix objeto. A instrução Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) constrói a matriz mostrada na figura a seguir.

Matriz.

Observação

No .NET 6 e versões posteriores, o pacote System.Drawing.Common, que inclui esse tipo, só tem suporte em sistemas operacionais Windows. O uso desse tipo em aplicativos de plataforma cruzada causa avisos de tempo de compilação e exceções de tempo de execução. Para obter mais informações, consulte System.Drawing.Common suportado apenas no Windows.

Transformações compostas

Uma transformação de composição é uma sequência de transformações, uma seguida da outra. Considere as matrizes e transformações na lista a seguir:

Matriz Transformação
Matriz A Girar 90 graus
Matriz B Dimensionar por um fator de 2 na direção x
Matriz C Mover 3 unidades na direção y

Se você começar com o ponto (2, 1) - representado pela matriz [2 1 1] - e multiplicar por A, depois B, então C, o ponto (2, 1) sofrerá as três transformações na ordem listada.

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

Em vez de armazenar as três partes da transformação de composição em três matrizes separadas, você pode multiplicar A, B e C juntos para obter uma única matriz 3 × 3 que armazena a transformação de composição inteira. Suponha que ABC = D. Então um ponto multiplicado por D dá o mesmo resultado que um ponto multiplicado por A, depois B, depois C.

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

A ilustração a seguir mostra as matrizes A, B, C e D.

Matrizes A, B, C e D

O fato de que a matriz de uma transformação composta pode ser formada multiplicando as matrizes de transformação individuais significa que qualquer sequência de transformações afins pode ser armazenada em um único Matrix objeto.

Cuidado

A ordem de uma transformação de composição é importante. Em geral, girar, dimensionar e converter não é o mesmo que dimensionar, girar e converter. Da mesma forma, a ordem de multiplicação de matriz é importante. Em geral, ABC não é o mesmo que BAC.

A Matrix classe fornece vários métodos para criar uma transformação composta: Multiply, Rotate, RotateAt, Scale, Sheare Translate. O exemplo a seguir cria a matriz de uma transformação de composição que primeiro gira 30 graus e, então, é dimensionada por um fator de 2 na direção y e movida em 5 unidades na direção x:

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)