//用asp.net畫餅圖(可用于各種投票程序) //和asp相比asp.net擁有更強大的功能,使用gdi+可以輕易實現(xiàn)以前很多不能辦到的圖形功能。 //首先在c:\中建庫mess.mdb,并建表title. //建二個字段,title(char型),point(int型) //非常滿意 281 //比較滿意 297 //還湊合 166 //不滿意 416 //我還寫了畫折線圖和條形圖的部分,目前正在把它們?nèi)繉戇M(jìn)一個類中。需要的可以和我聯(lián)系: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"]);//轉(zhuǎn)換成單精度,投票不可能投半票。也可寫成Convert.ToInt32 total+=tmp; } //Response.Write(Convert.ToString(total));
Font fontlegend=new Font("verdana",9),fonttitle=new Font("verdana",10,FontStyle.Bold);//設(shè)置字體 //fonttitle為主標(biāo)題的字體
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);//創(chuàng)建一個bitmap實例 //Bitmap objbitmap=new Bitmap(230,500);//創(chuàng)建一個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; } //---以下為生成主標(biāo)題 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); //列出各字段與得票數(shù) 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("總票數(shù)是:"+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>
|