//用asp.net画饼图(可用于各种投票程序) //和asp相比asp.net拥有更强大的功能,使用gdi+可以轻易实现以前很多不能办到的图形功能。 //首先在c:\中建库mess.mdb,并建表title. //建二个字段,title(char型),point(int型) //非常满意
281 //比较满意
297 //还凑合
166 //不满意
416 //我还写了画折线图和条形图的部分,目前正在把它们全部写进一个类中。需要的可以和我联系:mailto:ouyang76@263.net <%@
Page Language="C#" %> <%@import
namespace="System.Data"%> <%@import
namespace="System.Data.OleDb"%> <%@import
namespace="System.Drawing"%> <%@import
namespace="System.Drawing.Imaging"%> <script
language="c#" runat="server"> public void
page_load(Object obj,EventArgs
e) { //把连接字串指定为一个常量 const String strconn =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=c:\\mess.mdb"; OleDbConnection conn=new
OleDbConnection(strconn); conn.Open(); string
sql="select * from title"; OleDbCommand cmd=new
OleDbCommand(sql,conn); DataSet ds=new
DataSet(); OleDbDataAdapter adapter1=new
OleDbDataAdapter(cmd); adapter1.Fill(ds); conn.Close(); float
total=0.0f,tmp; int iloop;
for(iloop=0;iloop<ds.Tables[0].Rows.Count;iloop++)
{
tmp=Convert.ToSingle(ds.Tables[0].Rows[iloop]["point"]);//转换成单精度,投票不可能投半票。也可写成Convert.ToInt32
total+=tmp;
} //Response.Write(Convert.ToString(total));
Font fontlegend=new Font("verdana",9),fonttitle=new
Font("verdana",10,FontStyle.Bold);//设置字体 //fonttitle为主标题的字体
int width=230;//白色背景宽 const int bufferspace=15; int
legendheight=fontlegend.Height*(ds.Tables[0].Rows.Count+1)+bufferspace; int
titleheight = fonttitle.Height + bufferspace; int
height = width + legendheight + titleheight +
bufferspace;//白色背景高 int pieheight =
width; Rectangle pierect=new
Rectangle(0,titleheight,width,pieheight);
//加上各种随机色 ArrayList colors = new
ArrayList(); Random rnd = new Random(); for
(iloop = 0; iloop < ds.Tables[0].Rows.Count;
iloop++) colors.Add(new
SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255),
rnd.Next(255))));
Bitmap objbitmap=new
Bitmap(width,height);//创建一个bitmap实例 //Bitmap objbitmap=new
Bitmap(230,500);//创建一个bitmap实例 Graphics
objgraphics=Graphics.FromImage(objbitmap);
objgraphics.FillRectangle(new SolidBrush(Color.White), 0,
0, width, height);//画一个白色背景 objgraphics.FillRectangle(new
SolidBrush(Color.LightYellow),
pierect);//画一个亮黄色背景 //以下为画饼图(有几行row画几个) float
currentdegree=0.0f; for (iloop = 0; iloop <
ds.Tables[0].Rows.Count; iloop++) {
objgraphics.FillPie((SolidBrush) colors[iloop], pierect,
currentdegree,
Convert.ToSingle(ds.Tables[0].Rows[iloop]["point"]) / total *
360); currentdegree +=
Convert.ToSingle(ds.Tables[0].Rows[iloop]["point"]) / total *
360; } //---以下为生成主标题 SolidBrush blackbrush=new
SolidBrush(Color.Black); string
title="本次《程序员大本营》推出了配套的专刊,您对专刊满意吗?"; StringFormat
stringFormat = new
StringFormat(); stringFormat.Alignment =
StringAlignment.Center; stringFormat.LineAlignment =
StringAlignment.Center;
objgraphics.DrawString(title, fonttitle, blackbrush,
new Rectangle(0, 0, width,
titleheight),
stringFormat); //列出各字段与得票数 objgraphics.DrawRectangle(new
Pen(Color.Black, 2), 0, height - legendheight, width,
legendheight); for (iloop = 0; iloop <
ds.Tables[0].Rows.Count; iloop++)
{
objgraphics.FillRectangle((SolidBrush) colors[iloop], 5,
height - legendheight + fontlegend.Height * iloop + 5, 10,
10);
objgraphics.DrawString(((String)
ds.Tables[0].Rows[iloop]["title"]) + " - " +
Convert.ToString(ds.Tables[0].Rows[iloop]["point"]),
fontlegend, blackbrush, 20, height -
legendheight + fontlegend.Height * iloop +
1);
} // objgraphics.DrawString("总票数是:"+Convert.ToString(total),fontlegend,blackbrush,
5, height - fontlegend.Height
); //图像总的高度-一行字体的高度,即是最底行的一行字体高度(height - fontlegend.Height
) Response.ContentType="image/jpeg"; objbitmap.Save(Response.OutputStream,ImageFormat.Jpeg); //objbitmap.Save("myyyyyyyyyyy.jpg",
ImageFormat.Jpeg);//输出到文件
objgraphics.Dispose(); objbitmap.Dispose();
} </script> |