GDI+ 中的開放型和封閉型曲線
下圖顯示兩條曲線:一條開放,一條封閉。
曲線的受控介面
封閉曲線具有內部區域,因此可以使用筆刷填滿。 GDI+ 中的 Graphics 類別提供下列填滿封閉圖形和曲線的方法:FillRectangle、FillEllipse、FillPie、FillPolygon、FillClosedCurve、FillPath 和 FillRegion。 每當您呼叫其中一個方法時,都必須將其中一個特定的筆刷類型 (SolidBrush、HatchBrush、TextureBrush、LinearGradientBrush 或 PathGradientBrush) 傳遞為引數。
FillPie 方法隨附於 DrawArc 方法。 就像 DrawArc 方法繪製橢圓形外框的一部分一樣,FillPie 方法會填滿橢圓形內部的一部分。 下列範例會繪製弧線,並填滿橢圓形內部的對應部分:
myGraphics.FillPie(mySolidBrush, 0, 0, 140, 70, 0, 120);
myGraphics.DrawArc(myPen, 0, 0, 140, 70, 0, 120);
myGraphics.FillPie(mySolidBrush, 0, 0, 140, 70, 0, 120)
myGraphics.DrawArc(myPen, 0, 0, 140, 70, 0, 120)
下圖顯示弧線和填滿的扇形。
FillClosedCurve 方法隨附於 DrawClosedCurve 方法。 這兩種方法都會將終點連接到起點,以自動關閉曲線。 下列範例繪製一條經過 (0, 0)、(60, 20) 和 (40, 50) 的曲線。 然後,將 (40, 50) 連接到起點 (0, 0) 自動關閉曲線,並且將內部填滿純色。
Point[] myPointArray =
{
new Point(0, 0),
new Point(60, 20),
new Point(40, 50)
};
myGraphics.DrawClosedCurve(myPen, myPointArray);
myGraphics.FillClosedCurve(mySolidBrush, myPointArray);
Dim myPointArray As Point() = _
{New Point(0, 0), New Point(60, 20), New Point(40, 50)}
myGraphics.DrawClosedCurve(myPen, myPointArray)
myGraphics.FillClosedCurve(mySolidBrush, myPointArray)
FillPath 方法會填滿路徑個別片段的內部。 如果某個路徑的片段未形成封閉曲線或圖形,則 FillPath 方法會在填滿路徑之前自動關閉該路徑片段。 下列範例繪製並填滿由弧線、基數曲線、字串和扇形組成的路徑:
SolidBrush mySolidBrush = new SolidBrush(Color.Aqua);
GraphicsPath myGraphicsPath = new GraphicsPath();
Point[] myPointArray =
{
new Point(15, 20),
new Point(20, 40),
new Point(50, 30)
};
FontFamily myFontFamily = new FontFamily("Times New Roman");
PointF myPointF = new PointF(50, 20);
StringFormat myStringFormat = new StringFormat();
myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180);
myGraphicsPath.AddCurve(myPointArray);
myGraphicsPath.AddString("a string in a path", myFontFamily,
0, 24, myPointF, myStringFormat);
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);
myGraphics.FillPath(mySolidBrush, myGraphicsPath);
myGraphics.DrawPath(myPen, myGraphicsPath);
Dim mySolidBrush As New SolidBrush(Color.Aqua)
Dim myGraphicsPath As New GraphicsPath()
Dim myPointArray As Point() = { _
New Point(15, 20), _
New Point(20, 40), _
New Point(50, 30)}
Dim myFontFamily As New FontFamily("Times New Roman")
Dim myPointF As New PointF(50, 20)
Dim myStringFormat As New StringFormat()
myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180)
myGraphicsPath.AddCurve(myPointArray)
myGraphicsPath.AddString("a string in a path", myFontFamily, _
0, 24, myPointF, myStringFormat)
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110)
myGraphics.FillPath(mySolidBrush, myGraphicsPath)
myGraphics.DrawPath(myPen, myGraphicsPath)
下圖顯示具有及不具有實心填滿的路徑。 請注意,字串中的文字以 DrawPath 方法加上外框,但未填滿。 繪製字串中字元內部的是 FillPath 方法。