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

Faixas

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 um metarquivo.

Metarquivo transformado

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.

Consulte também

Outros recursos

Trabalhando com imagens, Bitmaps, ícones e metarquivos