Como: Refletir, girar e inclinar imagens
Você pode, refletir, girar e inclinar uma imagem especificando pontos de destino para os cantos superior esquerdo, superior direita e inferior esquerdo da imagem original. Os pontos de três destino determinam uma transformação afim, mapas de imagem original retangular um paralelogramo.
Exemplo
Por exemplo, suponha que a imagem original é um retângulo com o canto superior esquerdo em (0, 0), o canto superior direito em (100, 0) e o canto inferior esquerdo em (0, 50). Agora suponha que você mapeie os três aponta para pontos de destino da seguinte maneira.
Ponto original |
Ponto de destino |
---|---|
Superior-esquerdo (0, 0) |
(200, 20) |
Superior-direito (100, 0) |
(110, 100) |
Inferior esquerdo (0, 50) |
(250, 30) |
A ilustração a seguir mostra a imagem original e a imagem mapeada para um paralelogramo. A imagem original foi inclinada, refletida, girada e traduzida. O eixo x ao longo da borda superior da imagem original é mapeado para a linha que percorre (20, 200) e (110, 100). O eixo y ao longo da borda esquerda da imagem original é mapeado para a linha que percorre (20, 200) 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 um metarquivo.
O exemplo a seguir produz imagens mostradas na primeira ilustração.
' 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)
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);
Compilando o código
O exemplo anterior é projetado para uso com o Windows Forms e requer PaintEventArgs e, que é um parâmetro da Paint manipulador de eventos. Certifique-se de substituir Stripes.bmp com o caminho para uma imagem válida no sistema.