Compartir a través de


Cómo: Girar, reflejar y sesgar imágenes

Puede girar, reflejar y sesgar una imagen especificando puntos de destino para las esquinas superior izquierda, superior derecha y inferior izquierda de la imagen original. Los tres puntos de destino determinan una transformación afín que asigna la imagen rectangular original a un paralegrama.

Ejemplo

Por ejemplo, supongamos que la imagen original es un rectángulo con esquina superior izquierda en (0, 0), esquina superior derecha en (100, 0) y esquina inferior izquierda en (0, 50). Ahora supongamos que asigna esos tres puntos a los puntos de destino como se indica a continuación.

Punto original Punto de destino
La parte superior izquierda (0, 0) (200, 20)
Superior derecha (100, 0) (110, 100)
Izquierda inferior (0, 50) (250, 30)

En la ilustración siguiente se muestra la imagen original y la imagen asignada al paralelgrama. La imagen original se ha sesgado, reflejado, girado y traducido. El eje X a lo largo del borde superior de la imagen original se asigna a la línea que atraviesa los puntos (200, 20) y (110, 100). El eje Y a lo largo del borde izquierdo de la imagen original se asigna a la línea que pasa por (200, 20) y (250, 30).

La imagen original y la imagen asignada al paralelogramo.

En la ilustración siguiente se muestra una transformación similar aplicada a una imagen fotográfica:

La imagen de un escalador y la imagen asignada al paralelogramo.

En la ilustración siguiente se muestra una transformación similar aplicada a un metarchivo:

Ilustración de formas y texto que se asignan al paralelogramo.

En el ejemplo siguiente se generan las imágenes que se muestran en la primera ilustración.

    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)

Compilar el código

El ejemplo anterior está diseñado para su uso con Windows Forms y requiere PaintEventArgse, que es un parámetro del Paint controlador de eventos. Asegúrese de reemplazar Stripes.bmp por la ruta de acceso a una imagen válida en el sistema.

Consulte también