Método GraphicsPath::Warp (gdipluspath.h)
O método GraphicsPath::Warp aplica uma transformação de dobra a esse caminho. O método GraphicsPath::Warp também nivela (converte em uma sequência de linhas retas) o caminho.
Sintaxe
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*
Ponteiro para uma matriz de pontos que, juntamente com o parâmetro srcRect , define a transformação warp.
[in] count
Tipo: INT
Inteiro que especifica o número de pontos na matriz destPoints . O valor desse parâmetro deve ser 3 ou 4.
[in, ref] srcRect
Tipo: const RectF
Referência a um retângulo que, juntamente com o parâmetro destPoints , define a transformação warp.
[in] matrix
Tipo: const Matrix*
Opcional. Ponteiro para um objeto Matrix que representa uma transformação a ser aplicada junto com a dobra. Se esse parâmetro for NULL, nenhuma transformação será aplicada. O valor padrão é NULL.
[in] warpMode
Tipo: WarpMode
Opcional. Elemento da enumeração WarpMode que especifica o tipo de dobra a ser aplicado. O valor padrão é WarpModePerspective.
[in] flatness
Tipo: REAL
Opcional. Número real que influencia o número de segmentos de linha usados para aproximar o caminho original. Valores pequenos especificam que muitos segmentos de linha são usados e valores grandes especificam que poucos segmentos de linha são usados. O valor padrão é FlatnessDefault, que é uma constante definida em Gdiplusenums.h.
Retornar valor
Tipo: Status
Se o método for bem-sucedido, ele retornará Ok, que é um elemento da enumeração Status .
Se o método falhar, ele retornará um dos outros elementos da enumeração Status .
Comentários
Um objeto GraphicsPath armazena uma coleção de pontos de dados que representam linhas e curvas. O método GraphicsPath::Warp converte esses pontos de dados para que eles representem apenas linhas. O parâmetro flatness influencia o número de linhas armazenadas. Os pontos de dados originais que representaram curvas são perdidos.
Se o parâmetro count tiver um valor de 4, a transformação de dobra será definida conforme mostrado na tabela a seguir.
Ponto de origem | Ponto de destino |
---|---|
Canto superior esquerdo do srcRect | destPoints[0] |
Canto superior direito do srcRect | destPoints[1] |
Canto inferior esquerdo do srcRect | destPoints[2] |
Canto inferior direito do srcRect | destPoints[3] |
Uma transformação especificada por um retângulo de origem e quatro pontos de destino é capaz de mapear um retângulo para um quadrilátero arbitrário que não é necessariamente um paralelismo.
Se o parâmetro count tiver um valor de 3, a transformação de dobra será definida conforme mostrado na tabela a seguir.
Ponto de origem | Ponto de destino |
---|---|
Canto superior esquerdo do srcRect | destPoints[0] |
Canto superior direito do srcRect | destPoints[1] |
Canto inferior esquerdo do srcRect | destPoints[2] |
Uma transformação especificada por um retângulo de origem e três pontos de destino mapeia retângulos para paralelismos.
Exemplos
O exemplo a seguir cria um objeto GraphicsPath e adiciona uma figura fechada ao caminho. O código define uma transformação de dobra especificando um retângulo de origem e uma matriz de quatro pontos de destino. O retângulo de origem e os pontos de destino são passados para o método Warp . O código desenha o caminho duas vezes: uma vez antes de ter sido deformado e uma vez depois de ter sido deformado.
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 | Valor |
---|---|
Cliente mínimo com suporte | Windows XP, Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | gdipluspath.h (inclua Gdiplus.h) |
Biblioteca | Gdiplus.lib |
DLL | Gdiplus.dll |
Confira também
Construindo e desenhando demarcadores