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