This article has been excerpted from book "Graphics Programming with GDI+".Texture brushes allow us to use an image as a brush and fill GDI+ objects with the brush. Texture brushes are useful when you need to fill a graphics object with images in a pattern such as tile. In this section we will discuss how to create and use texture brushes in GDI+. FIGURE 4.5: The default hatch style rectangle FIGURE 4.6: The LightDownwardDiagonal style with different colors FIGURE 4.7: The DiagonalCross style In the .NET Framework library, the TextureBrush class represents a texture brush. Table 4.2 describes the properties of the TextureBrush class. Let's create an application using textures brushes. We create a Windows application. We also add a context menu to the form, along with five context menu items. The final looks like Figure 4.8. TABLE 4.2: TextureBrush properties
Image
Return the Image object associated with a TextureBrush object.
Transform
Represents a Matrix object that defines a local geometric transformation for the image.
WrapMode
Represents a WrapMode enumeration that indicates the wrap mode for a texture brush.
FIGURE 4.8: The texture brush application Note: The WrapMode enumeration represents the wrap mode for a texture brush. It has five members: Clamp, Tile, TileFlipX, TileFlipY and TileFlipXY. These members are described later, in Table 4.7. Now we add a class-level variable of TextureBrush type to the application: private TextureBrush txtrBrush = null; The next step is to create a texture brush from an image and fill a rectangle with that brush. We create an Image object on the form's load event handler from the file Image.gif, which is used to create a TextureBrush object. On the form's paint event handler, we call the FillRectangle method to fill the rectangle with the texture. Listing 4.8 shows the form's load and paint event handler. Note that our rectangle is the ClientRectangle of the form. LISTING 4.8: Creating a texture brush and filling a rectangle private void Form1_Load (object sender, System.EventArgs e) { //Create an image from a file Image img = new Bitmap("Image.GIF"); //Create a texture brush from an image txtrBrush = new TextureBrush (img); img.Dispose(); } private void Form1_Paint (object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; //Fill a rectangle with a texture brush g.FillRectangle (txtrBrush, ClientRectangle); } Now we can add event handlers for the context menu items as shown in Listing 4.9. As you can see from this code, we simply set the WrapMode property of the texture brush. LISTING 4.9: TextureBrush's context menu event handlers private void Clamp_Click(object sender, System.EventArgs e) { txtrBrush.WrapMode = WrapMode.Clamp; this.Invalidate(); } private void Title_Click(object sender, System.EventArgs e) { txtrBrush.WrapMode = WrapMode.Tile; this.Invalidate(); } private void TitleFlipX_Click(object sender, System.EventArgs e) { txtrBrush.WrapMode = WrapMode.TileFlipX; this.Invalidate(); } private void TileFlipY_Click(object sender, System.EventArgs e) { txtrBrush.WrapMode = WrapMode.TileFlipY; this.Invalidate(); } private void TileFlipXY_Click(object sender, System.EventArgs e) { txtrBrush.WrapMode = WrapMode.TileFlipXY; this.Invalidate(); } Finally, we need to load the context menu on the right mouse click event handler. As Listing 4.10 shows, we simply set the ContextMenu property of the form. LISTING 4.10: The right mouse button click event handler private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == MouseButtons.Right) { this.ContextMenu = contextMenu1; } } Now let's run the application. Figure 4.9 shows default (tiled) output from the program. The entire client rectangle is filled with texture. If we right-click on the form and select the Clamp menu item, we get Figure 4.10. Now let's select the TileFlipY option, which generates Figure 4.11. You can try other options on your own! FIGURE 4.9: Using Texture brushes FIGURE 4.10: Claming a texture FIGURE 4.11: The TileFlipY texture option Conclusion Hope the article would have helped you in understanding Texture Brushes in GDI+. Read other articles on GDI+ on the website.