This article has
been excerpted from book "Graphics Programming with GDI+".
Now let's write an application using ASP.NET. We will provide both fill and draw
options.
We create Forms application using Visual Studio .NET. We add some text and two
buttons to the page. The final Web page looks like Figure 12.16. The Draw Chart
button will draw a pie chart, and the Fill Chart button will fill the chart with
different colors.
Now we add some variables (see Listing 12.10). Instead of reading values from
the user, we use hard-coded values for the valArrray and clrArray array. The
valArray array stored the different portion values of a pie chart, and clrArray
stores colors for these portions. If you wish, you can modify the page and add
some text boxes to allow users to provide these values at runtime.
FIGURE 12.16: A pie chart-drawing application in ASP.NET
LISTING 12.10: User-defined variables
//User-defined variable
public
Bitmap curBitmap;
private
Rectangle rect =
new
Rectangle (250, 150, 200, 200);
public
ArrayList sliceList = new ArrayList();
private
Color curClr =
Color.Black;
int[]
valArray = {50, 25, 75, 100, 50};
Color[] clrArray =
{Color.Red, Color.Green,
Color.Yellow,
Color.Pink, Color.Aqua};
int
total =0;
Now we add a method called DrawPieChart. It
will both draw and fill the chart. The code for the DrawPieChart method is given
in Listing 12.11.
We simply read values from the portion and color arrays, and we create
SolidBrush and Pen objects, depending on which button is clicked. We create a
Bitmap object and set the smoothing mode of the page to AntiAlias. We also
initialize the values of the angle and sweep variable.
We also have a Boolean variable called flMode. If flMode is true, the
DrawPieChart method calls FillPie to fill the pie chart; otherwise it calls
DrawPie, which draws only the boundaries of the chart. In the end, we save the
bitmap, send it to the browser, and dispose of the objects.
LISTING 12.11: The DrawPieChart method
private void
DrawPieChart(bool flMode)
{
//Create Bitmap and Graphics objects
Bitmap curBitmap =
new Bitmap(500,
300);
Graphics g =
Graphics.FromImage(curBitmap);
g.SmoothingMode = SmoothingMode.AntiAlias;
float angle = 0;
float sweep = 0;
//Total
for (int
i = 0; i < valArray.Length; i++)
{
total += valArray[i];
}
//Read color and value from array
//and calculate sweep
for (int
i = 0; i < valArray.Length; i++)
{
int val = valArray[i];
Color clr = clrArray[i];
sweep = 360f * val / total;
//If fill mode, fill pie
if (flMode)
{
SolidBrush brush =
new SolidBrush(clr);
g.FillPie(brush, 20.0f, 20.0f, 200, 200, angle, sweep);
}
else
//if draw mode, draw pie
{
Pen pn =
new Pen(clr,
2);
g.DrawPie(pn, 20.0f, 20.0f, 200, 200, angle, sweep);
}
angle += sweep;
}
//Send output to the browser
curBitmap.Save(this.Response.OutputStream,
ImageFormat.Jpeg);
//Dispose of objects
curBitmap.Dispose();
g.Dispose();
}
The Draw Chart button click generates the output shown in Figure 12.17 and the
Fill Chart button click fills in the chart, with output as shown in Figure
12.18.
We call the DrawPieChart method from our Draw Chart and Fill Chart buttons with
single argument - false or true, respectively - as shown in Listing 12.12.
FIGURE 12.17: The Draw Chart button click in action
LISTING 12.12: The Draw Chart and Fill Chart button click handlers
private void
DrawChart_Click(object sender, System.EventArgs
e)
{
DrawPieChart(false);
}
private void
FillChart_Click(object sender, System.EventArgs
e)
{
DrawPieChart(true);
}
FIGURE 12.18: The Fill Chart button click in action