Delen via


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

De oorspronkelijke afbeelding en de afbeelding geprojecteerd op het parallellogram.

In de volgende afbeelding ziet u een vergelijkbare transformatie die is toegepast op een fotografische afbeelding:

De afbeelding van een klimmer en de afbeelding die is geprojecteerd op het parallellogram.

In de volgende afbeelding ziet u een vergelijkbare transformatie die is toegepast op een metabestand:

Afbeelding van vormen en tekst die zijn toegewezen aan het parallellogram.

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