Метод 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 |
См. также раздел
Построение и рисование контуров