Condividi tramite


Rotazione, riflessione e inclinazione delle immagini

È possibile ruotare, riflettere e asimmetrie un'immagine specificando i punti di destinazione per gli angoli superiore sinistro, superiore destro e inferiore sinistro dell'immagine originale. I tre punti di destinazione determinano una trasformazione affine che esegue il mapping dell'immagine rettangolare originale a un parallelogramma. L'angolo inferiore destro dell'immagine originale viene mappato al quarto angolo del parallelogramma, che viene calcolato dai tre punti di destinazione specificati.

Si supponga, ad esempio, che l'immagine originale sia un rettangolo con angolo superiore sinistro in corrispondenza di (0, 0), angolo superiore destro in (100, 0) e angolo inferiore sinistro in corrispondenza di (0, 50). Si supponga ora di eseguire il mapping di questi tre punti ai punti di destinazione come indicato di seguito.

Punto originale Punto di destinazione
Superiore sinistro (0, 0) (200, 20)
In alto a destra (100, 0) (110, 100)
In basso a sinistra (0, 50) (250, 30)

 

La figura seguente mostra l'immagine originale e l'immagine mappata al parallelogramma. L'immagine originale è stata asimmetrica, riflessa, ruotata e tradotta. L'asse x lungo il bordo superiore dell'immagine originale viene mappato alla linea che attraversa (200, 20) e (110, 100). L'asse y lungo il bordo sinistro dell'immagine originale è mappato alla linea che attraversa (200, 20) e (250, 30).

illustrazione che mostra strisce colorate all'origine degli assi delle coordinate e le stesse strisce asimmetriche e in una posizione, rotazione e dimensioni diverse

L'esempio seguente produce le immagini illustrate nella figura precedente.

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

La figura seguente mostra una trasformazione simile applicata a un'immagine fotografica.

illustrazione che mostra la stessa foto due volte; il secondo viene invertito, asimmetrico e ha dimensioni, rotazione e posizione diverse

La figura seguente mostra una trasformazione simile applicata a un metafile.

illustrazione che mostra forme e testo, quindi di nuovo ma invertito, asimmetrico e con posizione, rotazione e dimensioni diverse