first open a website
add a class file name it as LineChart.cs and paste the following code
LineChart.cs ------------------ import the following namespaces
using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections;
public class LineChart { public Bitmap Bitmapb; public string strTitle = "Default Title"; public ArrayList ArrayListchartValues = new ArrayList(); public float ftXorigin = 0, ftYorigin = 0; public float ftScaleX, ftScaleY; public float ftXdivs = 2, ftYdivs = 2; private int intWidth, intHeight; private Graphics Graphicsg; private Page Pagep;
struct datapoint { public float ftx; public float fty; public bool bolvalid; } //initialize
public LineChart(int intmyWidth, int intmyHeight, Page myPage) { intWidth = intmyWidth; intHeight = intmyHeight; ftScaleX = intmyWidth; ftScaleY = intmyHeight; Bitmapb = new Bitmap(intmyWidth, intmyHeight); Graphicsg = Graphics.FromImage(Bitmapb); Pagep = myPage; } public void AddValue(int intx, int inty) { datapoint myPoint; myPoint.ftx = intx; myPoint.fty = inty; myPoint.bolvalid = true; ArrayListchartValues.Add(myPoint);
} public void Draw()
{
int inti; float ftx, fty, ftx0, fty0; string strmyLabel; Pen penblackPen = new Pen(Color.Black,1); Brush BrushblackBrush = new SolidBrush(Color.Black); Font FontaxesFont = new Font("arial",10);
//first establish working area
Pagep.Response.ContentType="image/jpeg"; Graphicsg.FillRectangle(new SolidBrush(Color.LightYellow),0,0,intWidth,intHeight); int intChartInset = 50; int intChartWidth = intWidth-(2*intChartInset); int intChartHeight = intHeight-(2*intChartInset); Graphicsg.DrawRectangle(new Pen(Color.Black,1),intChartInset,intChartInset,intChartWidth,intChartHeight); //must draw all text items before doing the rotate below Graphicsg.DrawString(strTitle, new Font("arial",14), BrushblackBrush, intWidth/3, 10); //draw X axis labels for(inti=0; inti<=ftXdivs; inti++)
{
ftx=intChartInset+(inti*intChartWidth)/ftXdivs; fty=intChartHeight+intChartInset; strmyLabel = (ftXorigin + (ftScaleX*inti/ftXdivs)).ToString(); Graphicsg.DrawString(strmyLabel, FontaxesFont, BrushblackBrush, ftx-4, fty+10); Graphicsg.DrawLine(penblackPen, ftx, fty+2, ftx, fty-2); }
//draw Y axis labels for(inti=0; inti<=ftYdivs; inti++)
{
ftx=intChartInset; fty=intChartHeight+intChartInset-(inti*intChartHeight/ftYdivs); strmyLabel = (ftYorigin + (ftScaleY*inti/ftYdivs)).ToString(); Graphicsg.DrawString(strmyLabel, FontaxesFont, BrushblackBrush, 5, fty-6); Graphicsg.DrawLine(penblackPen, ftx+2, fty, ftx-2, fty);
}
//transform drawing coords to lower-left (0,0)
Graphicsg.RotateTransform(180); Graphicsg.TranslateTransform(0,-intHeight); Graphicsg.TranslateTransform(-intChartInset,intChartInset); Graphicsg.ScaleTransform(-1, 1);
//draw chart data
datapoint datapointprevPoint = new datapoint(); datapointprevPoint.bolvalid=false;
foreach(datapoint myPoint in ArrayListchartValues) {
if(datapointprevPoint.bolvalid==true)
{
ftx0=intChartWidth*(datapointprevPoint.ftx-ftXorigin)/ftScaleX; fty0=intChartHeight*(datapointprevPoint.fty-ftYorigin)/ftScaleY; ftx=intChartWidth*(myPoint.ftx-ftXorigin)/ftScaleX; fty=intChartHeight*(myPoint.fty-ftYorigin)/ftScaleY; Graphicsg.DrawLine(penblackPen,ftx0,fty0,ftx,fty); Graphicsg.FillEllipse(BrushblackBrush,ftx0-2,fty0-2,4,4); Graphicsg.FillEllipse(BrushblackBrush,ftx-2,fty-2,4,4);
}
datapointprevPoint = myPoint;
}
//finally send graphics to browser Bitmapb.Save(Pagep.Response.OutputStream, ImageFormat.Jpeg);
} LineChart()
{
Graphicsg.Dispose();
Bitmapb.Dispose();
}
}
-----------------------------------------------------------
add a default.aspx and add the following code in page load
default.aspx.cs ----------------- protected void Page_Load(object sender, EventArgs e) { LineChart c = new LineChart(640, 480, Page); c.strTitle = "My Line Chart"; c.ftXorigin = 0; c.ftScaleX = 500; c.ftXdivs = 5; c.ftYorigin = 0; c.ftScaleY = 1000; c.ftYdivs = 5; c.AddValue(50, 50); c.AddValue(100, 100); c.AddValue(200, 150); c.AddValue(450, 450); c.Draw();
}
|
| Author: svsv 21 May 2008 | Member Level: Bronze Points : 2 |
this is good one.. thq
|
| Author: Binu Kumar 22 May 2008 | Member Level: Silver Points : 2 |
Its very good thanks
|
| Author: alpa 29 Aug 2008 | Member Level: Bronze Points : 1 |
the code is good but how does it work with vb.net.I had converted it in vb.net & i m not getting any error but i cannot see any output.
|