Partager via


Guide pratique pour faire pivoter, refléter et incliner des images

Vous pouvez faire pivoter, refléter et incliner une image en spécifiant des points de destination pour les angles 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 applique l’image rectangulaire d’origine à un parallélogramme.

Exemple :

Par exemple, supposons que l’image d’origine est un rectangle avec le coin supérieur gauche à (0, 0), le coin supérieur droit à (100, 0) et le coin inférieur gauche à (0, 50). Supposons maintenant que vous mappiez ces trois points aux points de destination comme suit.

Point d’origine Point de destination
En haut à gauche (0, 0) (200, 20)
Haut à droite (100, 0) (110, 100)
En bas à gauche (0, 50) (250, 30)

L’illustration suivante montre l’image d’origine et l’image mappée au parallélisme. L’image d’origine a été asymétrique, réfléchie, pivotée et traduite. L'axe x le long du bord supérieur de l'image d'origine est mappé à la ligne qui passe par (200, 20) et (110, 100). L’axe y le long du bord gauche de l’image d’origine est mappé à la ligne qui s’exécute (200, 20) et (250, 30).

Image d’origine et image mappée sur le parallélogramme.

L’illustration suivante montre une transformation similaire appliquée à une image photographique :

L'image d'un grimpeur et l'image appliquée au parallélogramme.

L’illustration suivante montre une transformation similaire appliquée à un métafichier :

L'illustration des formes et du texte représentés sur le parallélogramme.

L’exemple suivant génère les images affichées dans la première illustration.

    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)

Compilation du code

L’exemple précédent est conçu pour être utilisé avec Windows Forms et nécessite PaintEventArgse, qui est un paramètre du gestionnaire d’événements Paint. Veillez à remplacer Stripes.bmp par le chemin d’accès à une image valide sur votre système.

Voir aussi