路径 (GDI+)
路径由直线、矩形和简单曲线组合而成。 回想 一下,从矢量图形概述 中,以下基本构建基块已被证明是最适用于绘制图片的构建基块。
- 线条
- 矩形
- 椭圆
- 弧线
- Polygon(多边形)
- 基数自由绘制曲线
- 贝塞尔自由绘制曲线
在 Windows GDI+ 中, GraphicsPath 对象允许你将这些构建基块的序列收集到单个单元中。 然后,可以通过一次调用 Graphics 类的Graphics::D rawPath 方法来绘制整个线条、矩形、多边形和曲线序列。 下图显示了通过组合直线、弧线、贝塞尔自由绘制曲线和基数自由绘制曲线创建的路径。
GraphicsPath 类提供以下方法用于创建要绘制的项序列:AddLine、AddRectangle、AddEllipse、AddArc、AddPolygon、AddCurve (用于基数样条) 和 AddBezier。 其中每种方法都重载;也就是说,每个方法都有不同的参数列表的多个变体。 例如,AddLine 方法的一个变体接收四个整数,AddLine 方法的另一个变体接收两个 Point 对象。
向路径添加线条、矩形和 Bézier 样条的方法具有复数配套方法,这些方法在单个调用中向路径添加多个项: AddLines、 AddRectangles 和 AddBeziers。 此外, 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);
下图显示了该路径。
除了向路径添加直线、矩形和曲线外,还可以向路径添加路径。 这样,就可以将现有路径组合在一起,形成大型复杂路径。 以下代码将 graphicsPath1 和 graphicsPath2 添加到 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);
下图显示了该路径。 请注意,路径不必相连;弧线、基数自由绘制曲线、字符串和扇形彼此分隔。