路径 (GDI+)

路径由直线、矩形和简单曲线组合而成。 回想 一下,从矢量图形概述 中,以下基本构建基块已被证明是最适用于绘制图片的构建基块。

  • 线条
  • 矩形
  • 椭圆
  • 弧线
  • Polygon(多边形)
  • 基数自由绘制曲线
  • 贝塞尔自由绘制曲线

在 Windows GDI+ 中, GraphicsPath 对象允许你将这些构建基块的序列收集到单个单元中。 然后,可以通过一次调用 Graphics 类的Graphics::D rawPath 方法来绘制整个线条、矩形、多边形和曲线序列。 下图显示了通过组合直线、弧线、贝塞尔自由绘制曲线和基数自由绘制曲线创建的路径。

将线条、弧线、贝塞尔样条和基数样条组合在一起的路径的插图

GraphicsPath 类提供以下方法用于创建要绘制的项序列:AddLineAddRectangleAddEllipseAddArcAddPolygonAddCurve (用于基数样条) 和 AddBezier。 其中每种方法都重载;也就是说,每个方法都有不同的参数列表的多个变体。 例如,AddLine 方法的一个变体接收四个整数,AddLine 方法的另一个变体接收两个 Point 对象。

向路径添加线条、矩形和 Bézier 样条的方法具有复数配套方法,这些方法在单个调用中向路径添加多个项: AddLinesAddRectanglesAddBeziers。 此外, AddCurve 方法具有配套方法 AddClosedCurve,用于向路径添加闭合曲线。

若要绘制路径,需要 Graphics 对象、 Pen 对象和 GraphicsPath 对象。 Graphics 对象提供 Graphics::D rawPath 方法,Pen 对象存储路径的属性,如线条宽度和颜色。 GraphicsPath 对象存储构成路径的线条、矩形和曲线序列。 Pen 对象和 GraphicsPath 对象的地址作为参数传递到 Graphics::D rawPath 方法。 以下示例绘制由线条、椭圆和贝塞尔样条组成的路径。

myGraphicsPath.AddLine(0, 0, 30, 20);
myGraphicsPath.AddEllipse(20, 20, 20, 40);
myGraphicsPath.AddBezier(30, 60, 70, 60, 50, 30, 100, 10);
myGraphics.DrawPath(&myPen, &myGraphicsPath);

下图显示了该路径。

由线条、椭圆和贝塞尔样条组成的路径的插图

除了向路径添加直线、矩形和曲线外,还可以向路径添加路径。 这样,就可以将现有路径组合在一起,形成大型复杂路径。 以下代码将 graphicsPath1graphicsPath2 添加到 myGraphicsPath GraphicsPath::AddPath 方法的第二个参数指定添加的路径是否连接到现有路径。

myGraphicsPath.AddPath(&graphicsPath1, FALSE);
myGraphicsPath.AddPath(&graphicsPath2, TRUE);

可以向路径添加另外两种项:字符串和扇形。 扇形是椭圆形内部的一部分。 以下示例从弧线、基数样条、字符串和饼图创建路径。

myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180);
myGraphicsPath.AddCurve(myPointArray, 3);
myGraphicsPath.AddString(L"a string in a path", 18, &myFontFamily, 
   0, 24, myPointF, &myStringFormat);
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);
myGraphics.DrawPath(&myPen, &myGraphicsPath);

下图显示了该路径。 请注意,路径不必相连;弧线、基数自由绘制曲线、字符串和扇形彼此分隔。

由断开连接的线条组成的路径的插图:弧线、基数样条、字符串和饼图