Comment : faire pivoter, refléter et incliner des images
Mise à jour : novembre 2007
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).
L'illustration suivante présente une transformation similaire appliquée à une image photographique.
L'illustration suivante présente une transformation similaire appliquée à un métafichier.
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 PaintEventArgse, 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.