Hoe: Afbeeldingen draaien, spiegelen en scheeftrekken
U kunt een afbeelding draaien, spiegelen en scheeftrekken door bestemmingspunten op te geven voor de linkerbovenhoek, rechterbovenhoek en linkerbenedenhoek van de oorspronkelijke afbeelding. De drie doelpunten bepalen een affinustransformatie waarmee de oorspronkelijke rechthoekige afbeelding wordt toegewezen aan een parallellogram.
Voorbeeld
Stel dat de oorspronkelijke afbeelding een rechthoek is met linksboven (0, 0), rechterbovenhoek (100, 0) en linkerbenedenhoek (0, 50). Stel nu dat u deze drie punten als volgt toewijst aan bestemmingspunten.
Oorspronkelijk punt | Doelpunt |
---|---|
Linksboven (0, 0) | (200, 20) |
Rechterbovenhoek (100, 0) | (110, 100) |
Linksonder (0, 50) | (250, 30) |
In de volgende afbeelding ziet u de oorspronkelijke afbeelding en de afbeelding die is toegewezen aan het parallellogram. De oorspronkelijke afbeelding is scheefgetrokken, weerspiegeld, gedraaid en vertaald. De x-as van de oorspronkelijke afbeelding langs de bovenrand wordt toegewezen naar de lijn die loopt door (200, 20) en (110, 100). De y-as langs de linkerrand van de oorspronkelijke afbeelding is toegewezen aan de lijn die loopt door (200, 20) en (250, 30).
In de volgende afbeelding ziet u een vergelijkbare transformatie die is toegepast op een fotografische afbeelding:
In de volgende afbeelding ziet u een vergelijkbare transformatie die is toegepast op een metabestand:
In het volgende voorbeeld worden de afbeeldingen geproduceerd die in de eerste afbeelding worden weergegeven.
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)
De code compileren
Het voorgaande voorbeeld is ontworpen voor gebruik met Windows Forms en vereist PaintEventArgse
, een parameter van de Paint gebeurtenis-handler. Zorg ervoor dat u Stripes.bmp
vervangt door het pad naar een afbeelding die geldig is op uw systeem.
Zie ook
.NET Desktop feedback