Procedura: ruotare, riflettere e inclinare immaginiHow to: Rotate, Reflect, and Skew Images

È possibile ruotare, riflettere e inclinare un'immagine, specificando i punti di destinazione per gli angoli superiore sinistro, superiore destro e inferiore sinistro dell'immagine originale.You can rotate, reflect, and skew an image by specifying destination points for the upper-left, upper-right, and lower-left corners of the original image. I punti di tre destinazione determinano una trasformazione affine che esegue il mapping dell'immagine rettangolare originale in un parallelogramma.The three destination points determine an affine transformation that maps the original rectangular image to a parallelogram.

EsempioExample

Ad esempio, si supponga che l'immagine originale è un rettangolo con angoli superiore sinistro (0, 0), nell'angolo superiore destro in (100, 0) e nell'angolo inferiore sinistro a (0, 50).For example, suppose the original image is a rectangle with upper-left corner at (0, 0), upper-right corner at (100, 0), and lower-left corner at (0, 50). Ora si supponga che si esegue il mapping di quelli di tre punti ai punti di destinazione come indicato di seguito.Now suppose you map those three points to destination points as follows.

Punto originaleOriginal point Punto di destinazioneDestination point
Alto-sinistra (0, 0)Upper-left (0, 0) (200, 20)(200, 20)
Alto-destra (100, 0)Upper-right (100, 0) (110, 100)(110, 100)
Basso-sinistra (0, 50)Lower-left (0, 50) (250, 30)(250, 30)

Nella figura seguente mostra l'immagine originale e l'immagine associata al parallelogramma.The following illustration shows the original image and the image mapped to the parallelogram. L'immagine originale è stata inclinata, riflessa, ruotata e convertito.The original image has been skewed, reflected, rotated, and translated. L'asse x lungo il bordo superiore dell'immagine originale viene eseguito il mapping alla riga in cui viene eseguito tramite (200, 20) e (110, 100).The x-axis along the top edge of the original image is mapped to the line that runs through (200, 20) and (110, 100). L'asse y lungo il bordo sinistro dell'immagine originale viene eseguito il mapping alla riga in cui viene eseguito tramite (200, 20) e (250, 30).The y-axis along the left edge of the original image is mapped to the line that runs through (200, 20) and (250, 30).

Vengono archiviati con stripingStripes

Nella figura seguente mostra una trasformazione analoga applicata a un'immagine fotografica.The following illustration shows a similar transformation applied to a photographic image.

Trasformato scalatoreTransformed Climber

Nella figura seguente mostra una trasformazione analoga applicata a un metafile.The following illustration shows a similar transformation applied to a metafile.

Trasformato MetafileTransformed Metafile

Nell'esempio seguente genera le immagini mostrate nella prima figura.The following example produces the images shown in the first illustration.

    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)

Compilazione del codiceCompiling the Code

L'esempio precedente è progettato per l'uso con Windows Form e richiede PaintEventArgs e, ovvero un parametro del Paint gestore dell'evento.The preceding example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of the Paint event handler. Assicurarsi di sostituire Stripes.bmp con il percorso di un'immagine che è valido per il sistema.Make sure to replace Stripes.bmp with the path to an image that is valid on your system.

Vedere ancheSee Also

Utilizzo di immagini, bitmap, icone e metafileWorking with Images, Bitmaps, Icons, and Metafiles