Поделиться через


Метод GraphicsPath::Warp (gdipluspath.h)

Метод GraphicsPath::Warp применяет преобразование warp к этому пути. Метод GraphicsPath::Warp также преобразует путь в плоскую структуру (преобразует в последовательность прямых линий).

Синтаксис

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

Параметры

[in] destPoints

Тип: const PointF*

Указатель на массив точек, который вместе с параметром srcRect определяет преобразование warp.

[in] count

Тип: INT

Целое число, указывающее количество точек в массиве destPoints . Значение этого параметра должно быть равно 3 или 4.

[in, ref] srcRect

Тип: const RectF

Ссылка на прямоугольник, который вместе с параметром destPoints определяет преобразование warp.

[in] matrix

Тип: const Matrix*

Необязательный элемент. Указатель на объект Matrix , представляющий преобразование, применяемое вместе с искоркой. Если этот параметр имеет значение NULL, преобразование не применяется. Значение по умолчанию — NULL.

[in] warpMode

Тип: WarpMode

Необязательный элемент. Элемент перечисления WarpMode , указывающий тип применяемого изменения. Значение по умолчанию — WarpModePerspective.

[in] flatness

Тип: REAL

Необязательный элемент. Реальное число, которое влияет на количество сегментов линий, используемых для приближения к исходному пути. Малые значения указывают, что используется много сегментов строк, а большие — несколько сегментов строк. Значение по умолчанию — FlatnessDefault, которое является константой, определенной в Gdiplusenums.h.

Возвращаемое значение

Тип: Состояние

В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .

Если метод завершается ошибкой, он возвращает один из других элементов перечисления Status .

Комментарии

Объект GraphicsPath хранит коллекцию точек данных, представляющих линии и кривые. Метод GraphicsPath::Warp преобразует эти точки данных таким образом, чтобы они представляли только линии. Параметр flatness влияет на количество хранимых строк. Исходные точки данных, представляющие кривые, теряются.

Если параметр count имеет значение 4, преобразование warp определяется, как показано в следующей таблице.

Исходная точка Точка назначения
Левый верхний угол srcRect destPoints[0]
Правый верхний угол srcRect destPoints[1]
Левый нижний угол srcRect destPoints[2]
Правый нижний угол srcRect destPoints[3]
 

Преобразование, заданное исходным прямоугольником и четырьмя конечными точками, может сопоставить прямоугольник с произвольным четырехугольником, который не обязательно является параллелограммом.

Если параметр count имеет значение 3, преобразование warp определяется, как показано в следующей таблице.

Исходная точка Точка назначения
Левый верхний угол srcRect destPoints[0]
Правый верхний угол srcRect destPoints[1]
Левый нижний угол srcRect destPoints[2]
 

Преобразование, заданное исходным прямоугольником и тремя точками назначения, сопоставляет прямоугольники с параллелограммами.

Примеры

В следующем примере создается объект GraphicsPath и добавляется закрытая фигура в путь. Код определяет преобразование warp, указывая исходный прямоугольник и массив из четырех точек назначения. Исходный прямоугольник и конечные точки передаются методу Warp . Код рисует путь дважды: один раз до того, как он был искрен, и один раз после того, как он был искрен.


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]);
}

Требования

Требование Значение
Минимальная версия клиента Windows XP, Windows 2000 Профессиональная [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header gdipluspath.h (включая Gdiplus.h)
Библиотека Gdiplus.lib
DLL Gdiplus.dll

См. также раздел

Обрезка с помощью региона

Построение и рисование контуров

Создание градиента пути

Выравнивание путей в плоскую структуру

GraphicsPath

GraphicsPath::Flatten

GraphicsPath::Outline

GraphicsPath::Widen

Матрица

Пути

WarpMode