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 |