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. Pontos de três destino determinam uma transformação afim que a imagem retangular original é mapeado para 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 mapeado para paralelogramo. A imagem original foi em horários diferentes, serão refletida, girada e traduzida. O eixo x ao longo da borda superior da imagem original é mapeado para a linha que percorre (200, 20) e (110, 100). O eixo y ao longo da borda esquerda da imagem original é mapeado para a linha que percorre (200, 20) e (250, 30).

Listras

A ilustração a seguir mostra uma transformação semelhante aplicada a uma imagem fotográfica.

Alpinista transformado

A ilustração a seguir mostra uma transformação semelhante aplicada a um metarquivo.

Metarquivo transformado

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);

Compilando o Código

O exemplo anterior é projetado para uso com o Windows Forms e requer PaintEventArgse, que é um parâmetro do Paint manipulador de eventos. Certifique-se de substituir Stripes.bmp com o caminho para uma imagem que é válido no seu sistema.

Mostrar: