GraphicsPath::Warp 方法 (gdipluspath.h)

GraphicsPath::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 参数一起定义扭曲转换。

[in] count

类型: INT

指定 destPoints 数组中的点数的整数。 此参数的值必须为 3 或 4。

[in, ref] srcRect

类型: const RectF

对矩形的引用,该矩形与 destPoints 参数一起定义扭曲转换。

[in] matrix

类型: const Matrix*

可选。 指向 Matrix 对象的指针,该 对象 表示要与扭曲一起应用的转换。 如果此参数为 NULL,则不应用任何转换。 默认值为 NULL。

[in] warpMode

类型: WarpMode

可选。 WarpMode 枚举的元素,该元素指定要应用的扭曲类型。 默认值为 WarpModePerspective。

[in] flatness

类型: REAL

可选。 影响用于近似原始路径的线段数的实数。 小值指定使用多个线段,大值指定使用少量线段。 默认值为 FlatnessDefault,它是 Gdiplusenums.h 中定义的常量。

返回值

类型: 状态

如果该方法成功,则返回 Ok,这是 Status 枚举的元素。

如果方法失败,它将返回 Status 枚举的其他元素之一。

注解

GraphicsPath 对象存储表示线条和曲线的数据点集合。 GraphicsPath::Warp 方法转换这些数据点,以便它们仅表示线条。 平面度参数会影响存储的行数。 表示曲线的原始数据点丢失。

如果 count 参数的值为 4,则定义扭曲转换,如下表所示。

源点 目标点
srcRect 的左上角 destPoints[0]
srcRect 的右上角 destPoints[1]
srcRect 的左下角 destPoints[2]
srcRect 的右下角 destPoints[3]
 

源矩形和四个目标点指定的转换能够将矩形映射到任意四边形,该四边形不一定是平行四边形。

如果 count 参数的值为 3,则定义扭曲转换,如下表所示。

源点 目标点
srcRect 的左上角 destPoints[0]
srcRect 的右上角 destPoints[1]
srcRect 的左下角 destPoints[2]
 

由源矩形和三个目标点指定的转换将矩形映射到平行四边形。

示例

以下示例创建 一个 GraphicsPath 对象,并向路径添加一个闭合的图形。 代码通过指定源矩形和四个目标点数组来定义扭曲转换。 源矩形和目标点将传递给 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 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 gdipluspath.h (包括 Gdiplus.h)
Library Gdiplus.lib
DLL Gdiplus.dll

另请参阅

使用区域进行剪裁

构造并绘制轨迹

创建路径渐变

平展路径

GraphicsPath

GraphicsPath::Flatten

GraphicsPath::Outline

GraphicsPath::Widen

矩阵

路径

WarpMode