日期:2014-05-20 浏览次数:21362 次
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
public partial class _Default : System.Web.UI.Page
{
int x = 0;
int y = 0;
int x_1_v = 0;
int y_1_v = 0;
int x_df = 0;
int y_df = 0;
int width = 0;
int height = 0;
double y_max = 0;
protected void Page_Load(object sender, EventArgs e)
{
CreateImage();
}
void CreateImage()
{
int id = int.Parse(Request.QueryString["id"].ToString());
_Init(100, 100, 40*id, 25, 24, 10);
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);
Pen pen1 = new Pen(Color.Turquoise, 1);
Pen pen2 = new Pen(System.Drawing.Color.DimGray, 1);
g.FillRectangle(Brushes.Black, 0, 0, width, height);
CreateMap(g, pen1, pen2);
String[] m = { "100", "90", "80", "70", "60", "50", "40", "30", "20", "10" };
Font font = new Font("Verdana", 12);
Brush b = Brushes.PowderBlue;
Creat_XY_Values(m, b, font, g);
y_max = double.Parse(m[0]);
DataTable dt = GetTable();
Pen mypen = new Pen(System.Drawing.Color.MediumSpringGreen, 1);
Brush bb = Brushes.Chartreuse;
Font font_line = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
DrawLine(dt, "value", "time", font_line, bb, mypen, g);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
}
void DrawLine(DataTable dt, string str_y, string str_x, Font font, Brush brush, Pen pen, Graphics g)
{
bool b = true;
Point[] point = new Point[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i != 0)
{
if (double.Parse(dt.Rows[i][str_y].ToString()) != 0)
{
double xx = ChangeTime(dt.Rows[i][str_x].ToString());
//double xx = double.Parse(dt.Rows[i][str_x].ToString());
point[i] = Points(xx, int.Parse(dt.Rows[i][str_y].ToString()));
//g.DrawString(dt.Rows[i][str_y].ToString(), font, brush, point[i].X - 10, point[i].Y - 20);
if (b)
{
g.DrawLine(pen, point[i - 1], point[i]);
}
else
{ b = true; }
}
else
{
double xx = ChangeTime(dt.Rows[i][str_x].ToString());
//double xx = double.Parse(dt.Rows[i][str_x].ToString());
point[i] = Points(xx, int.Parse(dt.Rows[i][str_y].ToString()));
b = false;
}
}
else
{
double xx = ChangeTime(dt.Rows[i][str_x].ToString());
//double xx = double.Parse(dt.Rows[i][str_x].ToString());
point[i] = Points(xx, int.Parse(dt.Rows[i][str_y].ToString()));
}
}
}
Point Points(double _x, int _y)
{
Point p = new Point();
p.X = (int)(x + x_1_v * _x);
p.Y = (int)(y + y_1_v * y_df - (_y * (y_1_v * y_df / y_max)));
return p;
}
double ChangeTime(string time)
{
string[] s = time.Split(':');
int x = int.Parse(s[0].ToString());
double ff = int.Parse(s[1].ToString());
double mm = int.Parse(s[2].ToString());
double f = (ff * 60 + mm) / 3600;
double xx = x + f;
return xx;
}
void _Init(int _x, int _y, int _x_1_v, int _y_1_v, int _x_df, int _y_df)
{
x = _x;
y = _y;
x_1_v = _x_1_v;
y_1_v = _y_1_v;
x_df = _x_df;
y_df = _y_df;
width = x + x_1_v * x_df + 100;
height = y + y_1_v * y_df + 100;
}
void CreateMap(Graphics g, Pen pen1, Pen pen2)
{
int _x = x;
int _y = y;
//X轴网线
for (int i = 0; i <= x_df; i++)
{
if (i == 0 || i == x_df)
g.DrawLine(pen1, _x, y, _x, y + y_1_v * y_df);
else
g.DrawLine(pen2, _x, y, _x, y + y_1_v * y_df);
_x += x_1_v;
}
//Y轴网线
for (int j = 0; j <= y_df; j++)
{
if (j == 0 || j == y_df)
g.DrawLine(pen1, x, _y, x + x_1_v * x_df, _y);
else
g.DrawLine(pen2, x, _y, x + x_1_v * x_df, _y);
_y += y_1_v;
}
}
void Creat_XY_Values(string[] Y_Values, Brush b, Font font, Graphics g)
{
int _x = x - 10;
int _y = y - 10;
for (int i = 0; i <= x_df; i++)
{
g.DrawString(i.ToString(), font, b, _x, y + y_1_v * y_df);
_x += x_1_v;
}
for (int j = 0; j < Y_Values.Length; j++)
{
g.DrawString(Y_Values[j], font, b, x - 11 * Y_Values[j].Length, _y);
_y += y_1_v;
}
}
DataTable GetTable()
{
SqlConnection Con = new SqlConnection("Server=(Local);Database=test;Uid=sa;Pwd=rose");
Con.Open();
string cmdtxt2 = "select * from test_2";
SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
DataSet ds = new DataSet();
da.Fill(ds, "Result");
DataTable dt = ds.Tables["Result"];
return dt;
}
}