Como girar, refletir e distorcer imagens
Você pode girar, refletir e distorcer uma imagem especificando pontos de destino para os cantos superior esquerdo, superior direito e inferior esquerdo da imagem original. Os três pontos de destino determinam uma transformação afim que mapeia a imagem retangular original para um paralelogramo.
Exemplo
Por exemplo, suponha que a imagem original seja um retângulo com canto superior esquerdo em (0, 0), canto superior direito em (100, 0) e canto inferior esquerdo em (0, 50). Agora suponha que você mapeie esses três pontos para pontos de destino da seguinte maneira.
Ponto original | Ponto de destino |
---|---|
Canto superior esquerdo (0, 0) | (200, 20) |
Canto superior direito (100, 0) | (110, 100) |
Canto inferior esquerdo (0, 50) | (250, 30) |
A ilustração a seguir mostra a imagem original e a imagem mapeada para o paralelogramo. A imagem original foi distorcida, refletida, girada e traduzida. O eixo x ao longo da borda superior da imagem original é mapeado para a linha que atravessa (200, 20) e (110, 100). O eixo y ao longo da margem esquerda da imagem original é mapeado para a linha que passa por (200, 20) e (250, 30).
A ilustração a seguir mostra uma transformação semelhante aplicada a uma imagem fotográfica:
A ilustração a seguir mostra uma transformação semelhante aplicada a um metarquivo:
O exemplo a seguir produz as imagens mostradas na primeira ilustração.
Point[] destinationPoints = {
new Point(200, 20), // destination for upper-left point of
// original
new Point(110, 100), // destination for upper-right point of
// original
new Point(250, 30)}; // destination for lower-left point of
// original
Image image = new Bitmap("Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0);
// Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints);
' New Point(200, 20) = destination for upper-left point of original
' New Point(110, 100) = destination for upper-right point of original
' New Point(250, 30) = destination for lower-left point of original
Dim destinationPoints As Point() = { _
New Point(200, 20), _
New Point(110, 100), _
New Point(250, 30)}
Dim image As New Bitmap("Stripes.bmp")
' Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0)
' Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints)
Compilando o código
O exemplo anterior foi projetado para uso com o Windows Forms e requer PaintEventArgse
, que é um parâmetro do manipulador de eventos Paint. Certifique-se de substituir Stripes.bmp
com o caminho para uma imagem que é válida no seu sistema.
Ver também
.NET Desktop feedback