ASP.NET Pie Chart

This is an ASPX page that is outputting a pie chart JPEG image. See this code in action: _piechart.aspx and _piechart2.aspx Note that for production, it would be best that this code is in a code behind file so that it is precompiled.

<%@ Page Language="VB" ContentType="image/jpeg" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%
	Response.Clear()
	Dim height As Integer = IIf(IsNumeric(Request.QueryString("height")), _
		Request.QueryString("height"), 300)
	Dim width As Integer = IIf(IsNumeric(Request.QueryString("width")), _
		Request.QueryString("width"), 300)
	Dim r As New Random
	Dim bmp As New Bitmap(width, height, PixelFormat.Format24bppRgb)
	Dim g As Graphics = Graphics.FromImage(bmp)
	g.SmoothingMode = SmoothingMode.AntiAlias
	g.Clear(Color.White)
	Dim Values(5) As Integer
	Dim SumOfValues As Integer = 0
	Dim i As Integer
	For i = 0 To 5
		Values(i) = r.Next(10, 1001)
		SumOfValues += Values(i)
	Next
	Dim rect As New Rectangle(0, 0, width - 50, height - 50)
	Dim sweep As Single
	Dim angle As Single
	Dim key As Integer = 10
	Dim hPen As New Pen(Color.Black, 1)
	For Each i In Values
		angle += sweep
		sweep = Convert.ToSingle(i) / SumOfValues * 360
		Dim hBrush As New SolidBrush(Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)))
		g.FillRectangle(hBrush, width - 45, key, 10, 13)
		g.DrawRectangle(hPen, width - 45, key, 10, 13)
		g.DrawString(i.ToString(), New Font("Arial", 8, FontStyle.Regular), _
			SystemBrushes.WindowText, width - 35, key)
		g.FillPie(hBrush, rect, angle, sweep)
		key += 13
	Next
	g.DrawEllipse(hPen, rect)
	bmp.Save(Response.OutputStream, ImageFormat.Jpeg)
	g.Dispose()
	bmp.Dispose()
%>
<%@ Page Language="C#" ContentType="image/jpeg" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%
	Response.Clear();
	int height, width;
	if (!int.TryParse(Request.QueryString["height"], out height))
		height = 300;
	if (!int.TryParse(Request.QueryString["width"], out width))
		width = 300;
	Random r = new Random();
	Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
	Graphics g = Graphics.FromImage(bmp);
	g.SmoothingMode = SmoothingMode.AntiAlias;
	g.Clear(Color.White);
	int[] Values = { 0, 0, 0, 0, 0, 0 };
	int SumOfValues = 0;
	for(int i = 0; i <= 5; i++)
	{
		Values[i] = r.Next(10, 1001);
		SumOfValues += Values[i];
	}
	Rectangle rect = new Rectangle(0, 0, width - 50, height - 50);
	float sweep = 0;
	float angle = 0;
	int key = 10;
	Pen hPen = new Pen(Color.Black, 1);
	foreach(int i in Values)
	{
		angle += sweep;
		sweep = (float)i / SumOfValues * 360;
		SolidBrush hBrush = new SolidBrush(Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)));
		g.FillRectangle(hBrush, width - 45, key, 10, 13);
		g.DrawRectangle(hPen, width - 45, key, 10, 13);
		g.DrawString(i.ToString(), new Font("Arial", 8, FontStyle.Regular), 
			SystemBrushes.WindowText, width - 35, key);
		g.FillPie(hBrush, rect, angle, sweep);
		key += 13;
	}
	g.DrawEllipse(hPen, rect);
	bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
	g.Dispose();
	bmp.Dispose();
%>

PieChart2: <img style="border:1px solid gray;" src="/_piechart2.aspx?values=Roland:0.100;Aaron:0.50;John:0.75;David:0.382;William:2.133;Felix:1.05;" />

<%@ Page Language="C#" ContentType="image/jpeg" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%
	// PIECHART2.ASPX
	Response.Clear();
	int height = 300;
	int width = 300 + 100;
	Random r = new Random();
	using(Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb))
	{
		using(Graphics g = Graphics.FromImage(bmp))
		{
			g.SmoothingMode = SmoothingMode.AntiAlias;
			g.Clear(Color.White);
			string values = Request.QueryString["values"];
			if(values != null)
			{
				string[] sections = values.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries);
				double SumOfValues = 0;
				for(int i = 0; i < sections.Length; i++)
				{
					string[] stmp = sections[i].Split(':');
					SumOfValues += float.Parse(stmp[1]);
				}
				Rectangle rect = new Rectangle(0, 20, width - 100 - 50, height - 50);
				float sweep = 0;
				float angle = 0;
				int key = 10;
				Pen hPen = new Pen(Color.Black, 1);
				Font font = new Font("Arial", 8, FontStyle.Regular);
				for(int i = 0; i < sections.Length; i++)
				{
					angle += sweep;
					string[] stmp = sections[i].Split(':');
					sweep = (float)(float.Parse(stmp[1]) / SumOfValues * 360.0F);
					Brush hBrush = new SolidBrush(Color.FromArgb(r.Next(255), r.Next(255), r.Next(255)));
					g.FillRectangle(hBrush, width - 100 - 45, key, 10, font.Height);
					g.DrawRectangle(hPen, width - 100 - 45, key, 10, font.Height);
					g.DrawString(stmp[0] + ": " + stmp[1], font, Brushes.Black, width - 100 - 35, key);
					g.FillPie(hBrush, rect, angle, sweep);
					key += font.Height;
				}
				g.DrawEllipse(hPen, rect);
			}
			bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
		}
	}
%>