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

Recorte com uma região

Construindo e desenhando demarcadores

Criando um Gradiente de Caminho

Caminhos de nivelamento

Graphicspath

GraphicsPath::Flatten

GraphicsPath::Outline

GraphicsPath::Widen

Matriz

Caminhos

Warpmode