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.
Die folgende Abbildung zeigt eine ähnliche Transformation, die auf ein Foto angewendet wird:
Die folgende Abbildung zeigt eine ähnliche Transformation, die auf eine Metadatei angewendet wird:
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
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für