Procedura: ruotare, riflettere e inclinare immagini

È possibile ruotare, riflettere a specchio e inclinare un'immagine specificando i punti di destinazione per gli angoli in alto a sinistra, in alto a destra e in basso a sinistra dell'immagine originale. I tre punti di destinazione determinano una trasformazione affine in cui l'immagine rettangolare originale viene associata a un parallelogramma.

Esempio

Si supponga ad esempio che l'immagine originale sia un rettangolo con l'angolo in altro a sinistra in (0, 0), l'angolo in alto a destra in (100, 0) e l'angolo in basso a sinistra in (0, 50). Si supponga ora di associare questi tre punti ai punti di destinazione nel modo che segue.

Punto di destinazione

Punto di destinazione

In alto a sinistra (0, 0)

(200, 20)

In alto a destra (100, 0)

(110, 100)

In basso a sinistra (0, 50)

(250, 30)

Nell'illustrazione che segue sono visibili l'immagine originale e l'immagine associata al parallelogramma. L'immagine originale è stata inclinata, riflessa, ruotata e traslata. L'asse X lungo il margine superiore dell'immagine originale è associato alla linea che passa tra (200, 20) e (110, 100). L'asse Y lungo il margine sinistro dell'immagine originale è associato alla linea che passa tra (200, 20) e (250, 30).

Strisce

Nell'illustrazione riportata di seguito si mostra una trasformazione analoga applicata a un'immagine fotografica.

Aumento convertito

Nell'illustrazione si seguito si mostra una trasformazione analoga applicata a un metafile.

Metafile convertito

Con l'esempio seguente vengono prodotte le immagini mostrate nell'illustrazione precedente.

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

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

Compilazione del codice

L'esempio riportato in precedenza è stato creato per essere utilizzato con Windows Form e richiede PaintEventArgs e, un parametro del gestore eventi Paint. Sostituire Stripes.bmp con il percorso e il nome di un file di immagine valido per il sistema.

Vedere anche

Altre risorse

Utilizzo di immagini, bitmap, icone e metafile