Classe System.Drawing.Drawing2D.Matrix

Observação

Este artigo fornece observações complementares à documentação de referência para esta 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 objeto Matrix. 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ó é suportado em sistemas operacionais Windows. O uso deste tipo em aplicações multiplataforma causa avisos em tempo de compilação e exceções em tempo de execução. Para obter mais informações, consulte System.Drawing.Common suportado apenas no Windows.

Transformações compostas

Uma transformação composta é 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 Rodar 90 graus
Matriz B Aumentar a escala por um fator de 2 na direção x
Matriz C Traduzir 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, então 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 composta em três matrizes separadas, você pode multiplicar A, B e C juntas para obter uma única matriz 3×3 que armazena toda a transformação composta. Suponhamos ABC = D. Em seguida, 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 pela multiplicação das matrizes de transformação individuais significa que qualquer sequência de transformações afins pode ser armazenada em um único objeto Matrix.

Atenção

A ordem de uma transformação composta é importante. Regra geral, girar, depois escalar e depois traduzir não é o mesmo que escalar, depois girar e depois traduzir. Da mesma forma, a ordem de multiplicação matricial é importante. Em geral, ABC não é o mesmo que BAC.

A classe Matrix fornece vários métodos para construir uma transformação composta: Multiply, Rotate, RotateAt, Scale, Sheare Translate. O exemplo a seguir cria a matriz de uma transformação composta que primeiro gira 30 graus, depois escala por um fator de 2 na direção y e, em seguida, traduz 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)