Freigeben über


Drehen, Spiegeln und Zerren von Bildern

Sie können ein Bild drehen, spiegeln und zerren, indem Sie Zielpunkte für die obere linke, obere rechte und untere linke Ecke des Originalbilds angeben. Durch die drei Zielpunkte wird eine affine Transformation ermittelt, durch die das rechteckige Originalbild einem Parallelogramm zugeordnet wird.

Angenommen, das Originalbild entspricht einem Rechteck mit der oberen linken Ecke an Position (0, 0), der oberen rechten Ecke an Position (100, 0) und der unteren linken Ecke an Position (0, 50). Stellen Sie sich jetzt vor, dass diese drei Punkte in der folgenden Weise Zielpunkten zugeordnet werden:

Originalpunkt Zielpunkt
Obere linke Ecke (0, 0) (200, 20)
Obere rechte Ecke (100, 0) (110, 100)
Untere linke Ecke (0, 50) (250, 30)

In der folgenden Abbildung ist das Originalbild sowie das Bild dargestellt, das dem Parallelogramm zugeordnet wurde. Das Originalbild wurde gezerrt, gespiegelt, gedreht und übersetzt. Die x-Achse am oberen Rand des Originalbilds wird der Linie zugeordnet, die durch (200, 20) und (110, 100) verläuft. Die y-Achse am linken Rand des Originalbilds wird der Linie zugeordnet, die durch (200, 20) und (250, 30) verläuft.

Im folgenden Codebeispiel werden die Bilder erstellt, die in der vorangehenden Abbildung dargestellt sind.

' 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 = 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)
[C#]
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);

In der folgenden Abbildung sehen Sie eine ähnliche Transformation, die auf ein Foto angewendet wurde.

In der folgenden Abbildung sehen Sie eine ähnliche Transformation, die auf eine Metadatei angewendet wurde.