Udostępnij za pośrednictwem


Otwarte i zamknięte krzywe w GDI+

Na poniższej ilustracji przedstawiono dwie krzywe: jedną otwartą i jedną zamkniętą.

Zrzut ekranu przedstawiający jedną otwartą krzywą i jedną zamkniętą krzywą.

Interfejs zarządzany dla krzywych

Zamknięte krzywe mają wnętrze i dlatego mogą być wypełnione szczotką. Klasa Graphics w GDI+ udostępnia następujące metody wypełniania zamkniętych kształtów i krzywych: FillRectangle, FillEllipse, FillPie, FillPolygon, FillClosedCurve, FillPathi FillRegion. Za każdym razem, gdy wywołujesz jedną z tych metod, musisz przekazać jeden z określonych typów pędzli (SolidBrush, HatchBrush, TextureBrush, LinearGradientBrushlub PathGradientBrush) jako argument.

Metoda FillPie jest towarzyszem metody DrawArc. Podobnie jak metoda DrawArc rysuje część konturu wielokropka, metoda FillPie wypełnia część wnętrza wielokropka. Poniższy przykład rysuje łuk i wypełnia odpowiednią część wnętrza elipsy:

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)

Na poniższej ilustracji przedstawiono łuk i wypełniony wykres kołowy.

Zrzut ekranu przedstawiający łuk i wypełnione koło lub okrągły wykres.

Metoda FillClosedCurve jest towarzyszem metody DrawClosedCurve. Obie metody automatycznie zamykają krzywą, łącząc punkt końcowy z punktem początkowym. Poniższy przykład rysuje krzywą przechodzącą przez (0, 0), (60, 20) i (40, 50). Następnie krzywa jest automatycznie zamykana przez połączenie (40, 50) z punktem początkowym (0, 0), a wnętrze jest wypełnione jednolitym kolorem.

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)

Metoda FillPath wypełnia wnętrza oddzielnych kawałków ścieżki. Jeśli kawałek ścieżki nie tworzy zamkniętej krzywej ani kształtu, metoda FillPath automatycznie zamyka ten fragment ścieżki przed wypełnieniem. Poniższy przykład rysuje i wypełnia ścieżkę składającą się z łuku, linii kardynanej, ciągu i kołowego:

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)

Na poniższej ilustracji przedstawiono ścieżkę zarówno z wypełnieniem stałym, jak i bez niego. Należy pamiętać, że tekst w łańcuchu znaków jest obrysowany, ale nie wypełniony metodą DrawPath. Jest to metoda FillPath, która maluje wnętrza tych znaków w ciągu tekstowym.

ciąg w ścieżce

Zobacz także