Freigeben über


Anleitung: Bilder drehen, spiegeln und schrägstellen

Sie können ein Bild drehen, spiegeln und verzerren, indem Sie Zielpunkte für die oberen linken, oberen rechten und unteren linken Ecken des Originalbilds angeben. Die drei Zielpunkte bestimmen eine affine Transformation, die das ursprüngliche rechteckige Bild einem Parallelogramm zuordnet.

Beispiel

Angenommen, das ursprüngliche Bild ist ein Rechteck mit der oberen linken Ecke (0, 0), der oberen rechten Ecke (100, 0) und der unteren linken Ecke bei (0, 50). Angenommen, Sie ordnen diese drei Punkte den Zielpunkten wie folgt zu.

Ursprünglicher Punkt Zielpunkt
Oben links (0, 0) (200, 20)
Oben rechts (100, 0) (110, 100)
Unten links (0, 50) (250, 30)

Die folgende Abbildung zeigt das originale Bild und das Bild, das dem Parallelogramm zugeordnet ist. Das Originalbild wurde verzerrt, reflektiert, gedreht und übersetzt. Die x-Achse entlang des oberen Rands des Originalbilds wird der Linie zugeordnet, die durch (200, 20) und (110, 100) verläuft. Die Y-Achse entlang des linken Rands des Originalbilds wird der Linie zugeordnet, die durch (200, 20) und (250, 30) verläuft.

Das originale Bild und das dem Parallelogramm zugeordnete Bild.

Die folgende Abbildung zeigt eine ähnliche Transformation, die auf ein fotografisches Bild angewendet wird:

Das Bild eines Kletterers und das Bild, das dem Parallelogramm zugeordnet ist.

Die folgende Abbildung zeigt eine ähnliche Transformation, die auf eine Metadatei angewendet wird:

Abbildung von Formen und Text, die dem Parallelogramm zugeordnet sind.

Im folgenden Beispiel werden die in der ersten Abbildung gezeigten Bilder erzeugt.

    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)

Code kompilieren

Das vorangehende Beispiel wurde für die Verwendung mit Windows Forms entwickelt und erfordert PaintEventArgse, bei dem es sich um einen Parameter des Paint-Ereignishandlers handelt. Stellen Sie sicher, dass Sie Stripes.bmp durch den Pfad zu einem Bild ersetzen, das auf Ihrem System gültig ist.

Siehe auch