Comment : faire pivoter, refléter et incliner des images

Vous pouvez appliquer une rotation, une réflexion et une inclinaison à une image en spécifiant des points de destination pour les coins supérieur gauche, supérieur droit et inférieur gauche de l'image d'origine. Les trois points de destination déterminent une transformation affine qui mappe l'image rectangulaire d'origine à un parallélogramme.

Exemple

Par exemple, supposons que l'image d'origine soit un rectangle dont le coin supérieur gauche se trouve en (0, 0), le coin supérieur droit en (100, 0) et le coin inférieur gauche en (0, 50). Supposons maintenant que vous mappiez ces trois points aux points de destination indiqués ci-dessous.

Point d'origine

Point de destination

Supérieur gauche (0, 0)

(200, 20)

Supérieur droit (100, 0)

(110, 100)

Inférieur gauche (0, 50)

(250, 30)

L'illustration suivante montre l'image d'origine et l'image mappée au parallélogramme. L'image d'origine a subi une inclinaison, une réflexion, une rotation et une translation. L'axe des x le long du bord supérieur de l'image d'origine est mappé à la ligne traversant (200, 20) et (110, 100). L'axe des y le long du bord gauche de l'image d'origine est mappé à la ligne traversant (200, 20) et (250, 30).

Rayures

L'illustration suivante présente une transformation similaire appliquée à une image photographique.

Climber transformé

L'illustration suivante présente une transformation similaire appliquée à un métafichier.

Métafichier transformé

L'exemple suivant produit les images présentées dans la première illustration.

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

Compilation du code

L'exemple précédent est destiné à une utilisation avec Windows Forms et nécessite PaintEventArgs e, qui est un paramètre du gestionnaire d'événements Paint. Veillez à remplacer Stripes.bmp par le chemin d'accès à une image qui est valide sur votre système.

Voir aussi

Autres ressources

Utilisation des images, bitmaps, icônes et métafichiers