Gewusst wie: 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.

Beispiel

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 verschoben. 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.

Stripes

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

Transformierter Anstieg

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

Transformierte Metadatei

Im folgenden Codebeispiel werden die Bilder erstellt, die in der ersten 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 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);

Kompilieren des Codes

Das vorhergehende Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgs e, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie Stripes.bmp durch einen in Ihrem System gültigen Pfad zu einem Bild.

Siehe auch

Weitere Ressourcen

Arbeiten mit Bildern, Bitmaps, Symbolen und Metadateien