So far we have seen only the draw methods of the Graphics class. As we discussed earlier, pens are used to draw the outer boundary of graphics, shapes, and brushes are used to fill the interior of graphics shapes. In this section we will cover the Fill methods of the Graphics class. You can fill only certain graphics shapes; hence there are only a few Fill methods available in the Graphics class. Table 3.5 lists them.
The FillCloseCurve Method
FillCloseCurve fills the interior of a closed curve. The first parameter of FillClosedCurve is a brush. It can be solid brush, a hatch brush, or a gradient brush. The second parameter is an array of points. The third and fourth parameters are optional. The third parameter is a fill mode, which is resented by the FillMode enumeration.
The FillMode enumeration specifies the way the interior of a closed path is filled. It has two modes: alternate or winding. The values for alternate and winding are Alternate and Winding, respectively. The default mode is Alternate. The fill mode matters only if the curve intersects itself (see Section 3.2.1.10).
To fill a closed curve using FillClosed Curve, an application first creates a Brush object and an array of points for the curve. The application can then set the fill mode and tension (which is optional) and call FillClosedCurve.
Listing 3.24 creates an array of PointF structures and a SolidBrush object, and calls FillClosedCurve.
LISTING 3.24: Using FillClosedCurve to fill a closed curve
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
' Create a pen
Dim bluePen As New Pen(Color.Blue, 1)
' Create an array of points
Dim pt1 As New PointF(40.0F, 50.0F)
Dim pt2 As New PointF(50.0F, 75.0F)
Dim pt3 As New PointF(100.0F, 115.0F)
Dim pt4 As New PointF(200.0F, 180.0F)
Dim pt5 As New PointF(200.0F, 90.0F)
Dim ptsArray As PointF() = {pt1, pt2, pt3, pt4, pt5}
' Fill a closed curve
Dim tension As Single = 1.0F
Dim flMode As FillMode = FillMode.Alternate
Dim blueBrush As New SolidBrush(Color.Blue)
e.Graphics.FillClosedCurve(blueBrush, ptsArray, flMode, tension)
' Dispose of object
blueBrush.Dispose()
End Sub
TABLE 3.5: Graphics fill methods
Method |
Description |
FillCloseCurve
|
Fills the interior of a closed cardinal spline curve defined by an array of Point structures.
|
FillEllipse
|
Fills the interior of an ellipse defined by a bounding rectangle specified by a pair of coordinates, a width and a height.
|
FillPath
|
Fills the interior of a GraphicsPath object.
|
FillPie
|
Fills the interior of a pie section defined by an ellipse specified by a pair of coordinates, a width, a height, and two radial lines.
|
FillPolygon
|
Fills the interior of a polygon defined by an array of points specified by Point structures.
|
FillRectangle
|
Fills the interior of a rectangle specified by a pair of a coordinates, a width, and a height.
|
FillRectangles
|
Fills the interiors of a series of rectangles specified by Rectangle structures.
|
FillRegion
|
Fills the interiors of a Region object.
|
FIGURE 3.36: Filing a closed curve
Figure 3.36 shows the output from Listing 3.24.
The FillEllipse Method
FillEllipse fills the interior of an ellipse. It takes a Brush object and rectangle coordinates.
To fill an ellipse using FillEllipse, an application creates a Brush and a rectangle and calls FillEllipse. Listing 3.25 creates three brushes and calls FillEllipse to fill an ellipse with a brush.
LISTING 3.25: Filling ellipses
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g As Graphics = e.Graphics
' Create brushes
Dim redBrush As New SolidBrush(Color.Red)
Dim blueBrush As New SolidBrush(Color.Blue)
Dim greenBrush As New SolidBrush(Color.Green)
'Create a rectangle
Dim rect As New Rectangle(80, 80, 50, 50)
' Fill ellipses
g.FillEllipse(greenBrush, 40.0F, 40.0F, 130.0F, 130.0F)
g.FillEllipse(blueBrush, 60, 60, 90, 90)
g.FillEllipse(greenBrush, 100.0F, 90.0F, 10.0F, 30.0F)
' Dispose of objects
blueBrush.Dispose()
redBrush.Dispose()
greenBrush.Dispose()
End Sub
Figure 3.37 shows the output from Listing 3.25.
FIGURE 3.37: Filling ellipses
The FillPath Method
FillPath fills the interior of a graphics path. To do this, an application creates Brush and Graphics objects and the calls FillPath, which takes a brush and a graphics path as arguments. Listing 3.26 create GraphicsPath and SolidBrush objects and calls FillPath.
LISTING 3.26: Filling a graphic path
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
' Create a solid brush
Dim greenBrush As New SolidBrush(Color.Green)
' Create a graphics path
Dim path As New GraphicsPath()
' Add a line to the path
path.AddLine(20, 20, 103, 80)
' Add an ellipse to the path
path.AddEllipse(100, 50, 100, 100)
' Add three more lines
path.AddLine(195, 80, 300, 80)
path.AddLine(200, 100, 300, 100)
path.AddLine(195, 120, 300, 120)
' Create a rectangle and call AddRectangle
Dim rect As New Rectangle(50, 150, 300, 50)
path.AddRectangle(rect)
' Fill path
e.Graphics.FillPath(greenBrush, path)
' Dispose of object
greenBrush.Dispose()
End Sub
Figure 3.38 shows the output from Listing 3.26. As the figure shows, the fill method fills all the covered areas of a graphics path.
FIGURE: 3.38: Filling a graphics path
The FillPie Method
FillPie fills a pie section with a specified brush. It takes four parameters: a brush, the rectangle of the ellipse, and the start and sweep angles. The following code calls FillPie.
g.FillPie(New SolidBrush(Color.Red), 0F, 0F, 100, 60, 0F, _
90F)
The FillPolygon Method
FillPolygon fills a polygon with the specified brush. It takes three parameters: a brush, an array of points, and a fill mode. The FillMode enumeration defines the fill mode of the interior of the path. It provides two fill modes: Alternate and Winding. The default mode is Alternate.
In our application we will use a hatch brush. So far we have seen only a solid brush. A solid brush is a brush with one color only. A hatch brush is a brush with a hatch style and two colors. These colors work together to support the hatch style. The HatchBrush class represents a hatch brush.
The Code in Listing 3.27 uses FillPolygon to fill a polygon using the Winding mode.
LISTING 3.27: Filling a polygon
Dim g As Graphics = e.Graphics
' Create a solid brush
Dim greenBrush As New SolidBrush(Color.Green)
' Create points for polygon
Dim p1 As New PointF(40.0F, 50.0F)
Dim p2 As New PointF(60.0F, 70.0F)
Dim p3 As New PointF(80.0F, 34.0F)
Dim p4 As New PointF(120.0F, 180.0F)
Dim p5 As New PointF(200.0F, 150.0F)
Dim ptsArray As PointF() = {p1, p2, p3, p4, p5}
' Draw polygon
e.Graphics.FillPolygon(greenBrush, ptsArray)
' Dispose of objects
greenBrush.Dispose()
Figure 3.39 shows the output from Listing 3.27. As you can see, the fill method fills all the areas of a polygon.
Filling Rectangle and Regions
FillRectangle fills a rectangle with a brush. This method takes a brush and a rectangle as arguments. FillRectangles fills a specified series of rectangles with a brush, and it takes a brush and an array of rectangles. These methods also have overloaded forms with additional options. For instance, if you're using a HatchStyle brush, you can specify background and foreground colors.
Note: The HatchBrush class is defined in the System.Drawing.Drawing2D namespace.
The source code in Listing 3.28 uses FillRectangle to fill two rectangles. One rectangle is filled with a hatch brush, the other with a solid brush.
LISTING 3.28: Filling rectangle
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
' Create brushes
Dim blueBrush As New SolidBrush(Color.Blue)
' Create a rectangle
Dim rect As New Rectangle(10, 20, 100, 50)
' Fill rectangle
e.Graphics.FillRectangle(New HatchBrush(HatchStyle.BackwardDiagonal, Color.Yellow, Color.Black), rect)
e.Graphics.FillRectangle(blueBrush, New Rectangle(150, 20, 50, 100))
' Dispose of object
blueBrush.Dispose()
End Sub
FillRegion fills a specified region with a brush. This method takes a brush and a region as input parameters. Listing 3.29 creates a Region object from a rectangle and calls FillRegion to fill the region.
LISTING 3.29: Filling regions
Dim rect As New Rectangle(20, 20, 150, 100)
Dim rgn As New Region(rect)
e.Graphics.FillRegion(New SolidBrush(Color.Green), rgn)
Conclusion
Hope the article would have helped you in understanding Fill Methods in GDI+. Read other articles on GDI+ on the website.