Select Method carefully in GDI+


This article has been excerpted from book "Graphics Programming with GDI+".

Drawing lines and drawing rectangles are probably the most common operations. If you are drawing more than one line or rectangle using the same colors, your should use the DrawLine/DrawLines and DrawRectangle/DrawRectangles methods, respectively. For example, Listing 13.13 draws three rectangles using the same brush.

Figure 13.5.gif

FIGURE 13.5: The same result from two different drawing methods

LISTING 13.13: Using DrawRectangle to draw rectangles

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //Create a black pen
            Pen blackPen = new Pen(Color.Black, 2);
            //Create a rectangle
            float x = 5.0f, y = 5.0f;
            float width = 100.0f;
            float height = 200.0f;
            Rectangle rect = new Rectangle(20, 20, 80, 40);
            //Draw rectangles
            g.DrawRectangle(blackPen, x, y, width, height);
            g.DrawRectangle(blackPen, 60, 80, 140, 50);
            g.DrawRectangle(blackPen, rect);
            //dispose of objects
            blackPen.Dispose();
        }
    }
}


Figure 13.6.gif

FIGURE 13.6: Using DrawRectangle to draw rectangles

Figure 13.6 shows the output from Listing 13.13. Three rectangles have been drawn.

You can replace the code in Listing 13.13 with Listing 13.14, which uses DrawRectangles to draw the
same number of rectangles. Now we use an array of rectangles.

LISTING 13.14: Using DrawRectangles to draw rectangles

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //Create a black pen
            Pen backPen = new Pen(Color.Black, 2);
            RectangleF[] rectArray =
{
new RectangleF( 5.0f, 5.0f, 100.0f, 200.0f),
new RectangleF( 20.0f, 20.0f, 80.0f, 40.0f),
new RectangleF( 60.0f, 80.0f, 140.0f, 50.0f),
};
            g.DrawRectangle(blackPen, rectArray);
            //dispose of objects
            blackPen.Dispose();
        }
    }
}

If we run this code, the output looks exactly like Figure 13.6.

Avoid Using Frequently Called Events

It is always good practice to write minimal code on events that are called frequently because that code will be executed whenever the event is called. The Paint event is specifically designed for painting purposes and is called when redrawing is necessary. It is always advisable to write your painting (or redrawing) –related code for this event only. Writing code for other events, such as mouse-move or keyboard events may cause serious problems or may not invalidate areas as necessary.

book.gif
 


Similar Articles