读书人

dotnetCHARTING.dll 图表控件的施用

发布时间: 2012-07-04 19:33:55 作者: rapoo

dotnetCHARTING.dll 图表控件的使用

下面的两种方法用一个就行,第二种有几个方法是自己画图的类,不依靠控件的(不过画出的图表不好看,仅参考学习)

方法一、Charting类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using dotnetCHARTING;


public class Charting
{

#region 共有变量

/// <summary>
/// 图片存放路径
/// </summary>
public string PhaysicalImagePath { get; set; }

/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }

/// <summary>
/// X轴名称
/// </summary>
public string XName { get; set; }

/// <summary>
/// Y轴名称
/// </summary>
public string YName { get; set; }

/// <summary>
/// 图例名称
/// </summary>
public string SeriseName { get; set; }

/// <summary>
/// 宽度
/// </summary>
public int SeriseWidth { get; set; }

/// <summary>
/// 高度
/// </summary>
public int SeriseHeight { get; set; }

/// <summary>
/// 数据源
/// </summary>
public DataTable DataSoure { get; set; }

public bool IsUse3D { get; set; }

public ChartType type { get; set; }
#endregion

public Charting() { }

/// <summary>
/// 柱形图
/// </summary>
/// <returns></returns>
public void CreateCombo(dotnetCHARTING.Chart Chart1)
{
Chart1.Title = Title;
Chart1.XAxis.Label.Text = XName;
Chart1.YAxis.Label.Text = this.YName;
Chart1.TempDirectory = this.PhaysicalImagePath;
Chart1.Width = this.SeriseWidth;
Chart1.Height = this.SeriseHeight;
Chart1.Type = ChartType.Combo;

Chart1.Series.Type = SeriesType.Cylinder;
Chart1.Series.Name = this.SeriseName;
Chart1.Series.Data = this.DataSoure;
Chart1.SeriesCollection.Add();
Chart1.DefaultSeries.DefaultElement.ShowValue = true;
Chart1.ShadingEffect = true;
Chart1.Use3D = IsUse3D;
Chart1.Series.DefaultElement.ShowValue = true;
}

/// <summary>
/// 饼图
/// </summary>
/// <returns></returns>
public void CreatePie(dotnetCHARTING.Chart Chart1)
{
Chart1.Title = Title;
Chart1.XAxis.Label.Text = XName;
Chart1.YAxis.Label.Text = this.YName;
Chart1.TempDirectory = this.PhaysicalImagePath;
Chart1.Width = this.SeriseWidth;
Chart1.Height = this.SeriseHeight;
Chart1.Type = ChartType.Pie;
Chart1.Series.Type = SeriesType.Cylinder;
Chart1.Series.Name = this.SeriseName;
Chart1.ShadingEffect = true;
Chart1.Use3D = IsUse3D;
Chart1.DefaultSeries.DefaultElement.Transparency = 20;
Chart1.DefaultSeries.DefaultElement.ShowValue = true;
Chart1.PieLabelMode = PieLabelMode.Outside;
Chart1.SeriesCollection.Add(getArrayData());
Chart1.Series.DefaultElement.ShowValue = true;
}

private SeriesCollection getArrayData()
{
SeriesCollection SC = new SeriesCollection();
DataTable dt = this.DataSoure;
for (int i = 0; i < dt.Rows.Count; i++)
{
Series s = new Series();
s.Name = dt.Rows[i][0].ToString();

Element e = new Element();

// 每元素的名称
e.Name = dt.Rows[i][0].ToString();

// 每元素的大小数值
e.YValue = Convert.ToDouble(dt.Rows[i][1].ToString());

s.Elements.Add(e);
SC.Add(s);
}
return SC;

}

/// <summary>
/// 曲线图
/// </summary>
/// <returns></returns>
public void CreateLine(dotnetCHARTING.Chart Chart1)
{
Chart1.Title = Title;
Chart1.XAxis.Label.Text = XName;
Chart1.YAxis.Label.Text = this.YName;
Chart1.TempDirectory = this.PhaysicalImagePath;
Chart1.Width = this.SeriseWidth;
Chart1.Height = this.SeriseHeight;

Chart1.Type = ChartType.Combo;
//此处一定要用DefaultSeries.Type = SeriesType.Line 否则没效果
Chart1.DefaultSeries.Type = SeriesType.Line;
Chart1.Series.Name = this.SeriseName;
Chart1.Series.Data = this.DataSoure;

Chart1.SeriesCollection.Add();

Chart1.DefaultSeries.DefaultElement.ShowValue = true;
Chart1.ShadingEffect = false;
Chart1.Use3D = IsUse3D;
Chart1.Series.DefaultElement.ShowValue = true;
}

}

方法二、ChartDrawUtility类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace SupperCard.Common
{
public class ChartDrawUtility
{
public static void DrawYuan(int[] iXiaoSH, string[] sMoth)
{
//int[] iXiaoSH = new int[12] { 16, 10, 20, 8, 10, 15, 20, 10, 12, 15, 20, 13 };
//定义一个数组,用以存放从数据库中读取的销售数据

//string[] sMoth = new string[12] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
//定义一个数组,用以存放从数据库中读取的销售月份

//读取Table01数据表中的各条数据,并存放在先前定义的二个数组中

Bitmap bm = new Bitmap(600, 300);
//创建一个长度为600,宽带为300的Bitmap实例

Graphics g;
g = Graphics.FromImage(bm);
g.Clear(Color.Snow);

g.DrawString(" ××××季度消费情况一览表", new Font("宋体", 16), Brushes.Black, new Point(5, 5));

//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题

//以下代码是是实现图01中的右上部区域
//以上是在图01中为下面绘制定位
Point myRec = new Point(515, 30);
Point myDec = new Point(540, 30);
Point myTxt = new Point(565, 30);
g.DrawString("单位:元", new Font("宋体", 9), Brushes.Black, new Point(515, 12));
for (int i = 0; i < sMoth.Length; i++)
{
g.FillRectangle(new SolidBrush(GetColor(i)), myRec.X, myRec.Y, 20, 10);
//填充小方块

g.DrawRectangle(Pens.Black, myRec.X, myRec.Y, 20, 10);
//绘制小方块

g.DrawString(sMoth[i].ToString(), new Font("宋体", 9), Brushes.Black, myDec);
//绘制小方块右边的文字

g.DrawString(iXiaoSH[i].ToString(), new Font("宋体", 9), Brushes.Black, myTxt);
myRec.Y += 15;
myDec.Y += 15;
myTxt.Y += 15;
}

//以下代码是根据从数据库中得到的数值大小,绘制扇型,并以相应色彩填充扇型,//从而构成图01中的Pie图
int iTatal = 0;
float fCurrentAngle = 0;
float fStartAngle = 0;
for (int i = 0; i < iXiaoSH.Length; i++)
{
iTatal = iTatal + iXiaoSH[i];
}
for (int i = 0; i < iXiaoSH.Length; i++)
{
//以下代码是获得要绘制扇型的开始角度
if (i == iXiaoSH.Length - 1)
{
fCurrentAngle = 360 - fStartAngle;
}
else
{
int iTemp = iXiaoSH[i];
fCurrentAngle = (iTemp * 360) / iTatal;
}
//根据参数绘制扇型

g.DrawPie(Pens.Black, 100,345, 250, 250, fStartAngle, fCurrentAngle);
//以指定色彩填充绘制的扇型

//g.DrawString("HELLO", new Font(new Font("宋体", 9), FontStyle.Regular), Brushes.Black, new PointF(120, 60));

g.FillPie(new SolidBrush(GetColor(i)), 100, 40, 250, 250, fStartAngle, fCurrentAngle);
fStartAngle += fCurrentAngle;
}
//画出图片的边框
Pen p = new Pen(Color.Green, 2);
g.DrawRectangle(p, 1, 1, 598, 298);

//向客户端输出数据流,并以此数据流形成Jpeg图片
bm.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Jpeg);

}

public static Color GetColor(int itemIndex)
{
Color MyColor;
int i = itemIndex;
switch (i)
{
case 0:
MyColor = Color.Green;
return MyColor;
case 1:
MyColor = Color.Red;
return MyColor;
case 2:
MyColor = Color.Yellow;
return MyColor;
case 3:
MyColor = Color.Blue;
return MyColor;
case 4:
MyColor = Color.Orange;
return MyColor;
case 5:
MyColor = Color.Aqua;
return MyColor;
case 6:
MyColor = Color.SkyBlue;
return MyColor;
case 7:
MyColor = Color.DeepPink;
return MyColor;
case 8:
MyColor = Color.Azure;
return MyColor;
case 9:
MyColor = Color.Brown;
return MyColor;
case 10:
MyColor = Color.Pink;
return MyColor;
case 11:
MyColor = Color.BurlyWood;
return MyColor;
case 12:
MyColor = Color.Chartreuse;
return MyColor;
default:
MyColor = Color.Pink;
return MyColor;
}
}

public static void DrawZhu(int[] iXiaoSH, string[] sMoth)
{
//int[] iXiaoSH = new int[12] { 16, 10, 20, 8, 10, 15, 20, 10, 12, 15, 20, 13 };
////定义一个数组,用以存放从数据库中读取的销售数据

//string[] sMoth = new string[12] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
////定义一个数组,用以存放从数据库中读取的销售月份

// int iIndex = 0 ;
// while ( myOleDbDataReader.Read ( ) )
// {
// iXiaoSH [ iIndex ] = myOleDbDataReader.GetInt32 ( 1 ) ;
// sMoth [ iIndex ] = myOleDbDataReader.GetInt32 ( 0 ) . ToString ( ) + "月" ;
// iIndex++ ;
// }
////读取Table01数据表中的各条数据,并存放在先前定义的二个数组中

// myConn . Close ( ) ;
// myOleDbDataReader . Close ( ) ;
//关闭各种资源

Bitmap bm = new Bitmap(600, 250);
//创建一个长度为600,宽带为250的Bitmap实例

Graphics g;
g = Graphics.FromImage(bm);
//由此Bitmap实例创建Graphic实例

g.Clear(Color.Snow);
//用Snow色彩为背景色填充此绘画图面

g.DrawString(" 季/年度消费情况一览表", new Font("黑体", 16), Brushes.Black, new Point(5, 5));
//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题

//以下代码是是实现图右上部
Point myRec = new Point(535, 30);
Point myDec = new Point(560, 26);

//以上是在图01中为下面绘制定位
g.DrawString("单位:元", new Font("宋体", 9), Brushes.Black, new Point(525, 12));


for (int i = 0; i < sMoth.Length; i++)
{
g.DrawRectangle(Pens.Black, myRec.X, myRec.Y, 20, 10);
//绘制小方块

g.FillRectangle(new SolidBrush(GetColor(i)), myRec.X, myRec.Y, 20, 10);
//填充小方块

g.DrawString(sMoth[i].ToString(), new Font("宋体", 9), Brushes.Black, myDec);
//绘制小方块右边的文字

myRec.Y += 15;
myDec.Y += 15;
}

//以下代码是绘制Bar图,及其销售数量
int iBarWidth = 40;
int scale = 10;
for (int i = 0; i < iXiaoSH.Length; i++)
{
g.DrawRectangle(Pens.Black, (i * iBarWidth) + 15, 250 - (iXiaoSH[i] * scale), 20, (iXiaoSH[i] * scale) + 5);
//绘制Bar图

g.FillRectangle(new SolidBrush(GetColor(i)), (i * iBarWidth) + 15, 250 - (iXiaoSH[i] * scale), 20, (iXiaoSH[i] * scale) + 5);
//以指定的色彩填充Bar图

g.DrawString(iXiaoSH[i].ToString(), new Font("宋体", 9), Brushes.Black, (i * iBarWidth) + 20, 235 - (iXiaoSH[i] * scale));
//显示Bar图代表的数据
}

//以下代码是绘制边框,并形成Jpeg文件,供浏览器显示出来
Pen p = new Pen(Color.Black, 2);
g.DrawRectangle(p, 1, 1, 598, 345);
bm.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Gif);

}

public static void CreateImage()
{
int height = 480, width = 700;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);

try
{
//清空图片背景色
g.Clear(Color.White);

Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);
Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular);
Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
LinearGradientBrush brush = new LinearGradientBrush(
new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);
g.FillRectangle(Brushes.AliceBlue, 0, 0, width, height);
Brush brush1 = new SolidBrush(Color.Blue);
Brush brush2 = new SolidBrush(Color.SaddleBrown);

g.DrawString("周消费统计折线图", font1, brush1, new PointF(85, 30));
//画图片的边框线
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

Pen mypen = new Pen(brush, 1);
Pen mypen2 = new Pen(Color.Red, 2);
//绘制线条
//绘制纵向线条
int x = 60;
for (int i = 0; i < 8; i++)
{
g.DrawLine(mypen, x, 80, x, 340);
x = x + 80;
}
Pen mypen1 = new Pen(Color.Blue, 3);
x = 60;
g.DrawLine(mypen1, x, 82, x, 340);

//绘制横向线条
int y = 106;
for (int i = 0; i < 10; i++)
{
g.DrawLine(mypen, 60, y, 620, y);
y = y + 26;
}
// y = 106;
g.DrawLine(mypen1, 60, y - 26, 620, y - 26);

//x轴
String[] n = { "第一周", "第二周", "第三周", "第四周", "第五周", "第六周", "第七周" };
x = 45;
for (int i = 0; i < 7; i++)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x, 348); //设置文字内容及输出位置
x = x + 77;
}

//y轴
String[] m = { "65", " 67", " 123", "89", " 125", " 100", " 75", " 50", " 25" };
y = 100;
for (int i = 0; i < 9; i++)
{
g.DrawString(m[i].ToString(), font, Brushes.Red, 10, y); //设置文字内容及输出位置
y = y + 26;
}

int[] Count1 = new int[7];
int[] Count2 = new int[7];

//SqlConnection Con = new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=eesoft");
//Con.Open();
//string cmdtxt2 = "SELECT * FROM ##Count where Company='" + this.ddlTaget.SelectedItem.Text.Trim() + "'";
//SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
//DataSet ds = new DataSet();
//da.Fill(ds);

//报名人数
Count1[0] = 28;// Convert.ToInt32(ds.Tables[0].Rows[0]["count1"].ToString());
Count1[1] = 50;// Convert.ToInt32(ds.Tables[0].Rows[0]["count3"].ToString());
Count1[2] = 56;// Convert.ToInt32(ds.Tables[0].Rows[0]["count5"].ToString());
Count1[3] = 14;// Convert.ToInt32(ds.Tables[0].Rows[0]["count7"].ToString());

Count1[6] = 38;// Convert.ToInt32(ds.Tables[0].Rows[0]["count9"].ToString()); //全年

Count1[4] = Count1[0] + Count1[1];
Count1[5] = Count1[2] + Count1[3];


//Count2[0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"].ToString());
//Count2[1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"].ToString());
//Count2[2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"].ToString());
//Count2[3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"].ToString());

//Count2[6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"].ToString()); //全年

//Count2[4] = Count2[0] + Count2[1];
//Count2[5] = Count2[2] + Count2[3];


//显示折线效果
Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points1 = new Point[7];
points1[0].X = 60; points1[0].Y = 340 - Count1[0]; //从106纵坐标开始, 到(0, 0)坐标时
points1[1].X = 140; points1[1].Y = 340 - Count1[1];
points1[2].X = 220; points1[2].Y = 340 - Count1[2];
points1[3].X = 300; points1[3].Y = 340 - Count1[3];

points1[4].X = 380; points1[4].Y = 340 - Count1[4];
points1[5].X = 460; points1[5].Y = 340 - Count1[5];

points1[6].X = 540; points1[6].Y = 340 - Count1[6];
g.DrawLines(mypen2, points1); //绘制折线

//绘制数字
g.DrawString(Count1[0].ToString(), font3, Brushes.Red, 58, points1[0].Y - 20);
g.DrawString(Count1[1].ToString(), font3, Brushes.Red, 138, points1[1].Y - 20);
g.DrawString(Count1[2].ToString(), font3, Brushes.Red, 218, points1[2].Y - 20);
g.DrawString(Count1[3].ToString(), font3, Brushes.Red, 298, points1[3].Y - 20);

g.DrawString(Count1[4].ToString(), font3, Brushes.Red, 378, points1[4].Y - 20);
g.DrawString(Count1[5].ToString(), font3, Brushes.Red, 458, points1[5].Y - 20);

g.DrawString(Count1[6].ToString(), font3, Brushes.Red, 538, points1[6].Y - 20);

//Pen mypen3 = new Pen(Color.Green, 2);
//Point[] points2 = new Point[7];
//points2[0].X = 60; points2[0].Y = 340 - Count2[0];
//points2[1].X = 140; points2[1].Y = 340 - Count2[1];
//points2[2].X = 220; points2[2].Y = 340 - Count2[2];
//points2[3].X = 300; points2[3].Y = 340 - Count2[3];

//points2[4].X = 380; points2[4].Y = 340 - Count2[4];
//points2[5].X = 460; points2[5].Y = 340 - Count2[5];

//points2[6].X = 540; points2[6].Y = 340 - Count2[6];
//g.DrawLines(mypen3, points2); //绘制折线

//绘制通过人数
//g.DrawString(Count2[0].ToString(), font3, Brushes.Green, 61, points2[0].Y - 15);
//g.DrawString(Count2[1].ToString(), font3, Brushes.Green, 131, points2[1].Y - 15);
//g.DrawString(Count2[2].ToString(), font3, Brushes.Green, 221, points2[2].Y - 15);
//g.DrawString(Count2[3].ToString(), font3, Brushes.Green, 301, points2[3].Y - 15);

//g.DrawString(Count2[4].ToString(), font3, Brushes.Green, 381, points2[4].Y - 15);
//g.DrawString(Count2[5].ToString(), font3, Brushes.Green, 461, points2[5].Y - 15);

//g.DrawString(Count2[6].ToString(), font3, Brushes.Green, 541, points2[6].Y - 15);

//绘制标识
g.DrawRectangle(new Pen(Brushes.Red), 180, 390, 250, 50); //绘制范围框
g.FillRectangle(Brushes.Red, 270, 402, 20, 10); //绘制小矩形
g.DrawString("消费金额(单位:元)", font2, Brushes.Red, 292, 400);

//g.FillRectangle(Brushes.Green, 270, 422, 20, 10);
//g.DrawString("通过人数", font2, Brushes.Green, 292, 420);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

public static void CreateImagePerson()
{
int height = 480, width = 700;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);

try
{
//清空图片背景色
g.Clear(Color.White);

Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);
Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular);
Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
LinearGradientBrush brush = new LinearGradientBrush(
new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);
g.FillRectangle(Brushes.AliceBlue, 0, 0, width, height);
Brush brush1 = new SolidBrush(Color.Blue);
Brush brush2 = new SolidBrush(Color.SaddleBrown);

g.DrawString("月考勤统计折线图", font1, brush1, new PointF(85, 30));
//画图片的边框线
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

Pen mypen = new Pen(brush, 1);
Pen mypen2 = new Pen(Color.Red, 2);
//绘制线条
//绘制纵向线条
int x = 60;
for (int i = 0; i < 8; i++)
{
g.DrawLine(mypen, x, 80, x, 340);
x = x + 80;
}
Pen mypen1 = new Pen(Color.Blue, 3);
x = 60;
g.DrawLine(mypen1, x, 82, x, 340);

//绘制横向线条
int y = 106;
for (int i = 0; i < 10; i++)
{
g.DrawLine(mypen, 60, y, 620, y);
y = y + 26;
}
// y = 106;
g.DrawLine(mypen1, 60, y - 26, 620, y - 26);

//x轴
String[] n = { "第一个月", "第二个月", "第三个月", "第四个月", "第五个月", "第六个月", "第七个月" };
x = 45;
for (int i = 0; i < 7; i++)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x, 348); //设置文字内容及输出位置
x = x + 77;
}

//y轴
String[] m = { "78", " 88", " 92", "89", " 45", " 89", " 99", " 67", " 100" };
y = 100;
for (int i = 0; i < 9; i++)
{
g.DrawString(m[i].ToString(), font, Brushes.Red, 10, y); //设置文字内容及输出位置
y = y + 26;
}

int[] Count1 = new int[7];
int[] Count2 = new int[7];

//SqlConnection Con = new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=eesoft");
//Con.Open();
//string cmdtxt2 = "SELECT * FROM ##Count where Company='" + this.ddlTaget.SelectedItem.Text.Trim() + "'";
//SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
//DataSet ds = new DataSet();
//da.Fill(ds);

//报名人数
Count1[0] = 28;// Convert.ToInt32(ds.Tables[0].Rows[0]["count1"].ToString());
Count1[1] = 50;// Convert.ToInt32(ds.Tables[0].Rows[0]["count3"].ToString());
Count1[2] = 56;// Convert.ToInt32(ds.Tables[0].Rows[0]["count5"].ToString());
Count1[3] = 14;// Convert.ToInt32(ds.Tables[0].Rows[0]["count7"].ToString());

Count1[6] = 38;// Convert.ToInt32(ds.Tables[0].Rows[0]["count9"].ToString()); //全年

Count1[4] = Count1[0] + Count1[1];
Count1[5] = Count1[2] + Count1[3];


//Count2[0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"].ToString());
//Count2[1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"].ToString());
//Count2[2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"].ToString());
//Count2[3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"].ToString());

//Count2[6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"].ToString()); //全年

//Count2[4] = Count2[0] + Count2[1];
//Count2[5] = Count2[2] + Count2[3];


//显示折线效果
Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points1 = new Point[7];
points1[0].X = 60; points1[0].Y = 340 - Count1[0]; //从106纵坐标开始, 到(0, 0)坐标时
points1[1].X = 140; points1[1].Y = 340 - Count1[1];
points1[2].X = 220; points1[2].Y = 340 - Count1[2];
points1[3].X = 300; points1[3].Y = 340 - Count1[3];

points1[4].X = 380; points1[4].Y = 340 - Count1[4];
points1[5].X = 460; points1[5].Y = 340 - Count1[5];

points1[6].X = 540; points1[6].Y = 340 - Count1[6];
g.DrawLines(mypen2, points1); //绘制折线

//绘制数字
g.DrawString(Count1[0].ToString(), font3, Brushes.Red, 58, points1[0].Y - 20);
g.DrawString(Count1[1].ToString(), font3, Brushes.Red, 138, points1[1].Y - 20);
g.DrawString(Count1[2].ToString(), font3, Brushes.Red, 218, points1[2].Y - 20);
g.DrawString(Count1[3].ToString(), font3, Brushes.Red, 298, points1[3].Y - 20);

g.DrawString(Count1[4].ToString(), font3, Brushes.Red, 378, points1[4].Y - 20);
g.DrawString(Count1[5].ToString(), font3, Brushes.Red, 458, points1[5].Y - 20);

g.DrawString(Count1[6].ToString(), font3, Brushes.Red, 538, points1[6].Y - 20);

//Pen mypen3 = new Pen(Color.Green, 2);
//Point[] points2 = new Point[7];
//points2[0].X = 60; points2[0].Y = 340 - Count2[0];
//points2[1].X = 140; points2[1].Y = 340 - Count2[1];
//points2[2].X = 220; points2[2].Y = 340 - Count2[2];
//points2[3].X = 300; points2[3].Y = 340 - Count2[3];

//points2[4].X = 380; points2[4].Y = 340 - Count2[4];
//points2[5].X = 460; points2[5].Y = 340 - Count2[5];

//points2[6].X = 540; points2[6].Y = 340 - Count2[6];
//g.DrawLines(mypen3, points2); //绘制折线

//绘制通过人数
//g.DrawString(Count2[0].ToString(), font3, Brushes.Green, 61, points2[0].Y - 15);
//g.DrawString(Count2[1].ToString(), font3, Brushes.Green, 131, points2[1].Y - 15);
//g.DrawString(Count2[2].ToString(), font3, Brushes.Green, 221, points2[2].Y - 15);
//g.DrawString(Count2[3].ToString(), font3, Brushes.Green, 301, points2[3].Y - 15);

//g.DrawString(Count2[4].ToString(), font3, Brushes.Green, 381, points2[4].Y - 15);
//g.DrawString(Count2[5].ToString(), font3, Brushes.Green, 461, points2[5].Y - 15);

//g.DrawString(Count2[6].ToString(), font3, Brushes.Green, 541, points2[6].Y - 15);

//绘制标识
g.DrawRectangle(new Pen(Brushes.Red), 180, 390, 250, 50); //绘制范围框
g.FillRectangle(Brushes.Red, 270, 402, 20, 10); //绘制小矩形
g.DrawString("出勤率", font2, Brushes.Red, 292, 400);

//g.FillRectangle(Brushes.Green, 270, 422, 20, 10);
//g.DrawString("通过人数", font2, Brushes.Green, 292, 420);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

public static void CreateImagedep()
{
int height = 480, width = 700;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);

try
{
//清空图片背景色
g.Clear(Color.White);

Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);
Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular);
Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
LinearGradientBrush brush = new LinearGradientBrush(
new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);
g.FillRectangle(Brushes.AliceBlue, 0, 0, width, height);
Brush brush1 = new SolidBrush(Color.Blue);
Brush brush2 = new SolidBrush(Color.SaddleBrown);

g.DrawString("财务部出勤统计折线图", font1, brush1, new PointF(85, 30));
//画图片的边框线
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

Pen mypen = new Pen(brush, 1);
Pen mypen2 = new Pen(Color.Red, 2);
//绘制线条
//绘制纵向线条
int x = 60;
for (int i = 0; i < 8; i++)
{
g.DrawLine(mypen, x, 80, x, 340);
x = x + 80;
}
Pen mypen1 = new Pen(Color.Blue, 3);
x = 60;
g.DrawLine(mypen1, x, 82, x, 340);

//绘制横向线条
int y = 106;
for (int i = 0; i < 10; i++)
{
g.DrawLine(mypen, 60, y, 620, y);
y = y + 26;
}
// y = 106;
g.DrawLine(mypen1, 60, y - 26, 620, y - 26);

//x轴
String[] n = { "第一个月", "第二个月", "第三个月", "第四个月", "第五个月", "第六个月", "第七个月" };
x = 45;
for (int i = 0; i < 7; i++)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x, 348); //设置文字内容及输出位置
x = x + 77;
}

//y轴
String[] m = { "65", " 67", " 123", "89", " 125", " 100", " 75", " 50", " 25" };
y = 100;
for (int i = 0; i < 9; i++)
{
g.DrawString(m[i].ToString(), font, Brushes.Red, 10, y); //设置文字内容及输出位置
y = y + 26;
}

int[] Count1 = new int[7];
int[] Count2 = new int[7];

//SqlConnection Con = new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=eesoft");
//Con.Open();
//string cmdtxt2 = "SELECT * FROM ##Count where Company='" + this.ddlTaget.SelectedItem.Text.Trim() + "'";
//SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
//DataSet ds = new DataSet();
//da.Fill(ds);

//报名人数
Count1[0] = 28;// Convert.ToInt32(ds.Tables[0].Rows[0]["count1"].ToString());
Count1[1] = 50;// Convert.ToInt32(ds.Tables[0].Rows[0]["count3"].ToString());
Count1[2] = 56;// Convert.ToInt32(ds.Tables[0].Rows[0]["count5"].ToString());
Count1[3] = 14;// Convert.ToInt32(ds.Tables[0].Rows[0]["count7"].ToString());

Count1[6] = 38;// Convert.ToInt32(ds.Tables[0].Rows[0]["count9"].ToString()); //全年

Count1[4] = Count1[0] + Count1[1];
Count1[5] = Count1[2] + Count1[3];


//Count2[0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"].ToString());
//Count2[1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"].ToString());
//Count2[2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"].ToString());
//Count2[3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"].ToString());

//Count2[6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"].ToString()); //全年

//Count2[4] = Count2[0] + Count2[1];
//Count2[5] = Count2[2] + Count2[3];


//显示折线效果
Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points1 = new Point[7];
points1[0].X = 60; points1[0].Y = 340 - Count1[0]; //从106纵坐标开始, 到(0, 0)坐标时
points1[1].X = 140; points1[1].Y = 340 - Count1[1];
points1[2].X = 220; points1[2].Y = 340 - Count1[2];
points1[3].X = 300; points1[3].Y = 340 - Count1[3];

points1[4].X = 380; points1[4].Y = 340 - Count1[4];
points1[5].X = 460; points1[5].Y = 340 - Count1[5];

points1[6].X = 540; points1[6].Y = 340 - Count1[6];
g.DrawLines(mypen2, points1); //绘制折线

//绘制数字
g.DrawString(Count1[0].ToString(), font3, Brushes.Red, 58, points1[0].Y - 20);
g.DrawString(Count1[1].ToString(), font3, Brushes.Red, 138, points1[1].Y - 20);
g.DrawString(Count1[2].ToString(), font3, Brushes.Red, 218, points1[2].Y - 20);
g.DrawString(Count1[3].ToString(), font3, Brushes.Red, 298, points1[3].Y - 20);

g.DrawString(Count1[4].ToString(), font3, Brushes.Red, 378, points1[4].Y - 20);
g.DrawString(Count1[5].ToString(), font3, Brushes.Red, 458, points1[5].Y - 20);

g.DrawString(Count1[6].ToString(), font3, Brushes.Red, 538, points1[6].Y - 20);

//Pen mypen3 = new Pen(Color.Green, 2);
//Point[] points2 = new Point[7];
//points2[0].X = 60; points2[0].Y = 340 - Count2[0];
//points2[1].X = 140; points2[1].Y = 340 - Count2[1];
//points2[2].X = 220; points2[2].Y = 340 - Count2[2];
//points2[3].X = 300; points2[3].Y = 340 - Count2[3];

//points2[4].X = 380; points2[4].Y = 340 - Count2[4];
//points2[5].X = 460; points2[5].Y = 340 - Count2[5];

//points2[6].X = 540; points2[6].Y = 340 - Count2[6];
//g.DrawLines(mypen3, points2); //绘制折线

//绘制通过人数
//g.DrawString(Count2[0].ToString(), font3, Brushes.Green, 61, points2[0].Y - 15);
//g.DrawString(Count2[1].ToString(), font3, Brushes.Green, 131, points2[1].Y - 15);
//g.DrawString(Count2[2].ToString(), font3, Brushes.Green, 221, points2[2].Y - 15);
//g.DrawString(Count2[3].ToString(), font3, Brushes.Green, 301, points2[3].Y - 15);

//g.DrawString(Count2[4].ToString(), font3, Brushes.Green, 381, points2[4].Y - 15);
//g.DrawString(Count2[5].ToString(), font3, Brushes.Green, 461, points2[5].Y - 15);

//g.DrawString(Count2[6].ToString(), font3, Brushes.Green, 541, points2[6].Y - 15);

//绘制标识
g.DrawRectangle(new Pen(Brushes.Red), 180, 390, 250, 50); //绘制范围框
g.FillRectangle(Brushes.Red, 270, 402, 20, 10); //绘制小矩形
g.DrawString("出勤率", font2, Brushes.Red, 292, 400);

//g.FillRectangle(Brushes.Green, 270, 422, 20, 10);
//g.DrawString("通过人数", font2, Brushes.Green, 292, 420);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

public static void CreateImageShop()
{
int height = 480, width = 700;
Bitmap image = new Bitmap(width, height);
Graphics g = Graphics.FromImage(image);

try
{
//清空图片背景色
g.Clear(Color.White);

Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);
Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular);
Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
LinearGradientBrush brush = new LinearGradientBrush(
new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);
g.FillRectangle(Brushes.AliceBlue, 0, 0, width, height);
Brush brush1 = new SolidBrush(Color.Blue);
Brush brush2 = new SolidBrush(Color.SaddleBrown);

g.DrawString("咖啡每日销售趋线图", font1, brush1, new PointF(85, 30));
//画图片的边框线
g.DrawRectangle(new Pen(Color.Blue), 0, 0, image.Width - 1, image.Height - 1);

Pen mypen = new Pen(brush, 1);
Pen mypen2 = new Pen(Color.Red, 2);
//绘制线条
//绘制纵向线条
int x = 60;
for (int i = 0; i < 8; i++)
{
g.DrawLine(mypen, x, 80, x, 340);
x = x + 80;
}
Pen mypen1 = new Pen(Color.Blue, 3);
x = 60;
g.DrawLine(mypen1, x, 82, x, 340);

//绘制横向线条
int y = 106;
for (int i = 0; i < 10; i++)
{
g.DrawLine(mypen, 60, y, 620, y);
y = y + 26;
}
// y = 106;
g.DrawLine(mypen1, 60, y - 26, 620, y - 26);

//x轴
String[] n = { "2010-12-12", "12-13", "12-14", "12-15", "12-16", "12-17", "12-18" };
x = 45;
for (int i = 0; i < 7; i++)
{
g.DrawString(n[i].ToString(), font, Brushes.Red, x, 348); //设置文字内容及输出位置
x = x + 77;
}

//y轴
String[] m = { "30", " 50", " 80", "100", " 130", " 150", " 180", "210", "230" };
y = 100;
for (int i = m.Length-1; i >0; i--)
{
g.DrawString(m[i].ToString(), font, Brushes.Red, 10, y); //设置文字内容及输出位置
y = y + 26;
}

int[] Count1 = new int[7];
int[] Count2 = new int[7];

//SqlConnection Con = new SqlConnection("Server=(Local);Database=committeeTraining;Uid=sa;Pwd=eesoft");
//Con.Open();
//string cmdtxt2 = "SELECT * FROM ##Count where Company='" + this.ddlTaget.SelectedItem.Text.Trim() + "'";
//SqlDataAdapter da = new SqlDataAdapter(cmdtxt2, Con);
//DataSet ds = new DataSet();
//da.Fill(ds);

//报名人数
Count1[0] = 28;// Convert.ToInt32(ds.Tables[0].Rows[0]["count1"].ToString());
Count1[1] = 60;// Convert.ToInt32(ds.Tables[0].Rows[0]["count3"].ToString());
Count1[2] = 73;// Convert.ToInt32(ds.Tables[0].Rows[0]["count5"].ToString());
Count1[3] =67;// Convert.ToInt32(ds.Tables[0].Rows[0]["count7"].ToString());

Count1[6] = 98;// Convert.ToInt32(ds.Tables[0].Rows[0]["count9"].ToString()); //全年

Count1[4] = Count1[0] + Count1[1];
Count1[5] = Count1[2] + Count1[3];


//Count2[0] = Convert.ToInt32(ds.Tables[0].Rows[0]["count2"].ToString());
//Count2[1] = Convert.ToInt32(ds.Tables[0].Rows[0]["count4"].ToString());
//Count2[2] = Convert.ToInt32(ds.Tables[0].Rows[0]["count6"].ToString());
//Count2[3] = Convert.ToInt32(ds.Tables[0].Rows[0]["count8"].ToString());

//Count2[6] = Convert.ToInt32(ds.Tables[0].Rows[0]["count10"].ToString()); //全年

//Count2[4] = Count2[0] + Count2[1];
//Count2[5] = Count2[2] + Count2[3];


//显示折线效果
Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
SolidBrush mybrush = new SolidBrush(Color.Red);
Point[] points1 = new Point[7];
points1[0].X = 60; points1[0].Y = 340 - Count1[0]; //从106纵坐标开始, 到(0, 0)坐标时
points1[1].X = 140; points1[1].Y = 340 - Count1[1];
points1[2].X = 220; points1[2].Y = 340 - Count1[2];
points1[3].X = 300; points1[3].Y = 340 - Count1[3];

points1[4].X = 380; points1[4].Y = 340 - Count1[4];
points1[5].X = 460; points1[5].Y = 340 - Count1[5];

points1[6].X = 540; points1[6].Y = 340 - Count1[6];
g.DrawLines(mypen2, points1); //绘制折线

//绘制数字
g.DrawString(Count1[0].ToString(), font3, Brushes.Red, 58, points1[0].Y - 20);
g.DrawString(Count1[1].ToString(), font3, Brushes.Red, 138, points1[1].Y - 20);
g.DrawString(Count1[2].ToString(), font3, Brushes.Red, 218, points1[2].Y - 20);
g.DrawString(Count1[3].ToString(), font3, Brushes.Red, 298, points1[3].Y - 20);

g.DrawString(Count1[4].ToString(), font3, Brushes.Red, 378, points1[4].Y - 20);
g.DrawString(Count1[5].ToString(), font3, Brushes.Red, 458, points1[5].Y - 20);

g.DrawString(Count1[6].ToString(), font3, Brushes.Red, 538, points1[6].Y - 20);

//Pen mypen3 = new Pen(Color.Green, 2);
//Point[] points2 = new Point[7];
//points2[0].X = 60; points2[0].Y = 340 - Count2[0];
//points2[1].X = 140; points2[1].Y = 340 - Count2[1];
//points2[2].X = 220; points2[2].Y = 340 - Count2[2];
//points2[3].X = 300; points2[3].Y = 340 - Count2[3];

//points2[4].X = 380; points2[4].Y = 340 - Count2[4];
//points2[5].X = 460; points2[5].Y = 340 - Count2[5];

//points2[6].X = 540; points2[6].Y = 340 - Count2[6];
//g.DrawLines(mypen3, points2); //绘制折线

//绘制通过人数
//g.DrawString(Count2[0].ToString(), font3, Brushes.Green, 61, points2[0].Y - 15);
//g.DrawString(Count2[1].ToString(), font3, Brushes.Green, 131, points2[1].Y - 15);
//g.DrawString(Count2[2].ToString(), font3, Brushes.Green, 221, points2[2].Y - 15);
//g.DrawString(Count2[3].ToString(), font3, Brushes.Green, 301, points2[3].Y - 15);

//g.DrawString(Count2[4].ToString(), font3, Brushes.Green, 381, points2[4].Y - 15);
//g.DrawString(Count2[5].ToString(), font3, Brushes.Green, 461, points2[5].Y - 15);

//g.DrawString(Count2[6].ToString(), font3, Brushes.Green, 541, points2[6].Y - 15);

//绘制标识
g.DrawRectangle(new Pen(Brushes.Red), 180, 390, 250, 50); //绘制范围框
g.FillRectangle(Brushes.Red, 270, 402, 20, 10); //绘制小矩形
g.DrawString("销售金额(单位:元)", font2, Brushes.Red, 292, 400);

//g.FillRectangle(Brushes.Green, 270, 422, 20, 10);
//g.DrawString("通过人数", font2, Brushes.Green, 292, 420);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}

public static void DrawYuanShop(int[] iXiaoSH, string[] sMoth)
{
//int[] iXiaoSH = new int[12] { 16, 10, 20, 8, 10, 15, 20, 10, 12, 15, 20, 13 };
//定义一个数组,用以存放从数据库中读取的销售数据

//string[] sMoth = new string[12] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
//定义一个数组,用以存放从数据库中读取的销售月份

//读取Table01数据表中的各条数据,并存放在先前定义的二个数组中

Bitmap bm = new Bitmap(600, 300);
//创建一个长度为600,宽带为300的Bitmap实例

Graphics g;
g = Graphics.FromImage(bm);
g.Clear(Color.Snow);

g.DrawString("本月销售情况一览表", new Font("宋体", 16), Brushes.Black, new Point(5, 5));

//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题

//以下代码是是实现图01中的右上部区域
//以上是在图01中为下面绘制定位
Point myRec = new Point(485, 30);
Point myDec = new Point(510, 30);
Point myTxt = new Point(545, 30);
g.DrawString("单位:元", new Font("宋体", 9), Brushes.Black, new Point(515, 12));
for (int i = 0; i < sMoth.Length; i++)
{
g.FillRectangle(new SolidBrush(GetColor(i)), myRec.X, myRec.Y, 20, 10);
//填充小方块

g.DrawRectangle(Pens.Black, myRec.X, myRec.Y, 20, 10);
//绘制小方块

g.DrawString(sMoth[i].ToString(), new Font("宋体", 9), Brushes.Black, myDec);
//绘制小方块右边的文字

g.DrawString(iXiaoSH[i].ToString(), new Font("宋体", 9), Brushes.Black, myTxt);
myRec.Y += 15;
myDec.Y += 15;
myTxt.Y += 15;
}

//以下代码是根据从数据库中得到的数值大小,绘制扇型,并以相应色彩填充扇型,//从而构成图01中的Pie图
int iTatal = 0;
float fCurrentAngle = 0;
float fStartAngle = 0;
for (int i = 0; i < iXiaoSH.Length; i++)
{
iTatal = iTatal + iXiaoSH[i];
}
for (int i = 0; i < iXiaoSH.Length; i++)
{
//以下代码是获得要绘制扇型的开始角度
if (i == iXiaoSH.Length - 1)
{
fCurrentAngle = 360 - fStartAngle;
}
else
{
int iTemp = iXiaoSH[i];
fCurrentAngle = (iTemp * 360) / iTatal;
}
//根据参数绘制扇型

g.DrawPie(Pens.Black, 100, 345, 250, 250, fStartAngle, fCurrentAngle);
//以指定色彩填充绘制的扇型

//g.DrawString("HELLO", new Font(new Font("宋体", 9), FontStyle.Regular), Brushes.Black, new PointF(120, 60));

g.FillPie(new SolidBrush(GetColor(i)), 100, 40, 250, 250, fStartAngle, fCurrentAngle);
fStartAngle += fCurrentAngle;
}
//画出图片的边框
Pen p = new Pen(Color.Green, 2);
g.DrawRectangle(p, 1, 1, 598, 298);

//向客户端输出数据流,并以此数据流形成Jpeg图片
bm.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Jpeg);

}
}
}

读书人网 >编程

热点推荐