private void CreateImage( ) { //把连接字串指定为一个常量 string strconn = "Server=(local);Database=db_13;Uid=sa;Pwd="; SqlConnection Con = new SqlConnection(strconn); Con.Open( ); string cmdtxt = "select * from tb_13"; SqlCommand Com = new SqlCommand(cmdtxt, Con); DataSet ds = new DataSet( ); SqlDataAdapter Da = new SqlDataAdapter(Com); Da.Fill(ds); Con.Close( ); float Total = 0.0f, Tmp; int iloop; for (iloop = 0; iloop < ds.Tables[0].Rows.Count; iloop++) { //转换成单精度。也可写成Convert.ToInt32 Tmp = Convert.ToSingle(ds.Tables[0].Rows[iloop]["Approp"]); Total += Tmp; } //设置字体,fonttitle为主标题的字体 Font fontlegend = new Font("verdana", 9), fonttitle = new Font("verdana", 10, FontStyle.Bold); //背景宽 int width = 230; 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实例 Bitmap objbitmap = new Bitmap(width, height); 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]["Approp"]) / Total * 360); currentdegree += Convert.ToSingle(ds.Tables[0]. Rows[iloop]["Approp"]) / 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]["ProductName"]) + " —— " + Convert.ToString (Convert. ToSingle(ds.Tables[0].Rows[iloop]["Approp"]) *100/Total).Substring(0,5)+"%", fontlegend, blackbrush, 20, height - legendheight + fontlegend.Height * iloop + 1); } //图像总的高度-一行字体的高度,即是最底行的一行字体高度 (height - fontlegend.Height ) objgraphics.DrawString("商品总数是:" + Convert.ToString(Total)+"件", fontlegend, blackbrush, 5, height - fontlegend. Height); Response.ContentType = "image/gif"; objbitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif); objgraphics.Dispose( ); objbitmap.Dispose( ); } |