Share via


Vorgehensweise: Drehen, Spiegeln und Neigen von Bildern

Sie können ein Bild drehen, spiegeln und neigen/scheren, indem Sie Zielpunkte für die obere linke, obere rechte und untere linke Ecke des Originalbilds angeben. Die drei Zielpunkte bestimmen eine affine Transformation, die das rechteckige Originalbild einem Parallelogramm zuordnet.

Beispiel

Angenommen, das Originalbild ist ein Rechteck mit der oberen linken Ecke bei (0, 0), der oberen rechten Ecke bei (100, 0) und der unteren linken Ecke bei (0, 50). Ferner 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 Originalbild und das dem Parallelogramm zugeordnete Bild. Das Originalbild wurde geneigt, gespiegelt, gedreht und eine Translation daran ausgeführt. 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.

The original image and the image mapped to the parallelogram.

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

The picture of a climber and the picture mapped to the parallelogram.

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

Illustration of shapes and text and that mapped to the parallelogram.

Im folgenden Beispiel werden die in der ersten Abbildung dargestellten 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)

Kompilieren des Codes

Das obige Beispiel ist für die Verwendung in Windows Forms konzipiert und erfordert PaintEventArgse, einen Parameter des Paint-Ereignishandlers. Stellen Sie sicher, dass Sie Stripes.bmp durch den Pfad zu einem Bild ersetzen, das auf Ihrem System gültig ist.

Siehe auch