Drehen, Spiegeln und Skewingen 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. (Die untere rechte Ecke des ursprünglichen Bilds wird der vierten Ecke des Parallelogramms zugeordnet, die aus den drei angegebenen Zielpunkten berechnet wird.)
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). Angenommen, wir ordnen diese drei Punkte wie folgt Zielpunkten 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.
Im folgenden Beispiel werden die In der vorherigen Abbildung gezeigten Bilder erstellt.
Point destinationPoints[] = {
Point(200, 20), // destination for upper-left point of original
Point(110, 100), // destination for upper-right point of original
Point(250, 30)}; // destination for lower-left point of original
Image image(L"Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
graphics.DrawImage(&image, 0, 0);
// Draw the image mapped to the parallelogram.
graphics.DrawImage(&image, destinationPoints, 3);
Die folgende Abbildung zeigt eine ähnliche Transformation, die auf ein fotografisches Bild angewendet wird.
Die folgende Abbildung zeigt eine ähnliche Transformation, die auf eine Metadatei angewendet wird.