Método GraphicsPath::Warp (gdipluspath.h)

El método GraphicsPath::Warp aplica una transformación warp a esta ruta de acceso. El método GraphicsPath::Warp también aplana (convierte en una secuencia de líneas rectas) la ruta de acceso.

Sintaxis

Status Warp(
  [in]      const PointF  *destPoints,
  [in]      INT           count,
  [in, ref] const RectF & srcRect,
  [in]      const Matrix  *matrix,
  [in]      WarpMode      warpMode,
  [in]      REAL          flatness
);

Parámetros

[in] destPoints

Tipo: const PointF*

Puntero a una matriz de puntos que, junto con el parámetro srcRect , define la transformación warp.

[in] count

Tipo: INT

Entero que especifica el número de puntos de la matriz destPoints . El valor de este parámetro debe ser 3 o 4.

[in, ref] srcRect

Tipo: const RectF

Referencia a un rectángulo que, junto con el parámetro destPoints , define la transformación warp.

[in] matrix

Tipo: matriz const *

Opcional. Puntero a un objeto Matrix que representa una transformación que se va a aplicar junto con la deformación. Si este parámetro es NULL, no se aplica ninguna transformación. El valor predeterminado es NULL.

[in] warpMode

Tipo: WarpMode

Opcional. Elemento de la enumeración WarpMode que especifica el tipo de deformación que se va a aplicar. El valor predeterminado es WarpModePerspective.

[in] flatness

Tipo: REAL

Opcional. Número real que influye en el número de segmentos de línea que se usan para aproximar la ruta de acceso original. Los valores pequeños especifican que se usan muchos segmentos de línea y los valores grandes especifican que se usan pocos segmentos de línea. El valor predeterminado es FlatnessDefault, que es una constante definida en Gdiplusenums.h.

Valor devuelto

Tipo: Estado

Si el método se ejecuta correctamente, devuelve Ok, que es un elemento de la enumeración Status .

Si se produce un error en el método, devuelve uno de los otros elementos de la enumeración Status .

Comentarios

Un objeto GraphicsPath almacena una colección de puntos de datos que representan líneas y curvas. El método GraphicsPath::Warp convierte esos puntos de datos para que solo representen líneas. El parámetro flatness influye en el número de líneas almacenadas. Los puntos de datos originales que representan curvas se pierden.

Si el parámetro count tiene un valor de 4, la transformación warp se define como se muestra en la tabla siguiente.

Punto de origen Punto de destino
Esquina superior izquierda de srcRect destPoints[0]
Esquina superior derecha de srcRect destPoints[1]
Esquina inferior izquierda de srcRect destPoints[2]
Esquina inferior derecha de srcRect destPoints[3]
 

Una transformación especificada por un rectángulo de origen y cuatro puntos de destino es capaz de asignar un rectángulo a un cuadrilátero arbitrario que no es necesariamente un paralelógrama.

Si el parámetro count tiene un valor de 3, la transformación warp se define como se muestra en la tabla siguiente.

Punto de origen Punto de destino
Esquina superior izquierda de srcRect destPoints[0]
Esquina superior derecha de srcRect destPoints[1]
Esquina inferior izquierda de srcRect destPoints[2]
 

Una transformación especificada por un rectángulo de origen y tres puntos de destino asigna rectángulos a paralegramas.

Ejemplos

En el ejemplo siguiente se crea un objeto GraphicsPath y se agrega una figura cerrada a la ruta de acceso. El código define una transformación de deformación especificando un rectángulo de origen y una matriz de cuatro puntos de destino. El rectángulo de origen y los puntos de destino se pasan al método Warp . El código dibuja la ruta de acceso dos veces: una vez antes de que se haya warado y una vez después de que se haya avisado.


VOID WarpExample(HDC hdc)
{
   Graphics graphics(hdc);

   // Create a path.
   PointF points[] ={
      PointF(20.0f, 60.0f),
      PointF(30.0f, 90.0f),
      PointF(15.0f, 110.0f),
      PointF(15.0f, 145.0f),
      PointF(55.0f, 145.0f),
      PointF(55.0f, 110.0f),
      PointF(40.0f, 90.0f),
      PointF(50.0f, 60.0f)};

   GraphicsPath path;
   path.AddLines(points, 8);
   path.CloseFigure();

   // Draw the path before applying a warp transformation.
   Pen bluePen(Color(255, 0, 0, 255));
   graphics.DrawPath(&bluePen, &path);

   // Define a warp transformation, and warp the path.
   RectF srcRect(10.0f, 50.0f, 50.0f, 100.0f);

   PointF destPts[] = {
      PointF(220.0f, 10.0f),
      PointF(280.0f, 10.0f),
      PointF(100.0f, 150.0f),
      PointF(400.0f, 150.0f)};

   path.Warp(destPts, 4, srcRect);

   // Draw the warped path.
   graphics.DrawPath(&bluePen, &path);

   // Draw the source rectangle and the destination polygon.
   Pen blackPen(Color(255, 0, 0, 0));
   graphics.DrawRectangle(&blackPen, srcRect);
   graphics.DrawLine(&blackPen, destPts[0], destPts[1]);
   graphics.DrawLine(&blackPen, destPts[0], destPts[2]);
   graphics.DrawLine(&blackPen, destPts[1], destPts[3]);
   graphics.DrawLine(&blackPen, destPts[2], destPts[3]);
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP, Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado gdipluspath.h (incluya Gdiplus.h)
Library Gdiplus.lib
Archivo DLL Gdiplus.dll

Consulte también

Recorte con una región

Crear y dibujar trazados

Crear un degradado de trazado

Aplanar rutas de acceso

Graphicspath

GraphicsPath::Flatten

GraphicsPath::Outline

GraphicsPath::Widen

Matriz

Paths

WarpMode