C#实现饼图

void Draw_Img(){
   Bitmap bmp = new Bitmap(400,300);
            //创建一个长度为400,宽带为400的Bitmap实例
            Graphics g;
   g = Graphics.FromImage(bmp);
   g.Clear(Color.Snow);
   string[] sitem = {"很好","好","一般","差"};
   int[] num = {1000,69,90,20};
   int cnt,i,len;
   float s;
   float[] nflt;
   string header;
   header = "";
   cnt =0;
   s = 0;
   len = num.Length;
   //nflt.Length = len;
   nflt = new float[len];
   for(i=0;i<len;i++){
    cnt += num[i];
   }
   //flt = cnt /len;
   for(i=0;i<len;i++){
  
    nflt[i] = 360 * num[i]/cnt;
   }


   header = "调查统计结果一览图";
   g.DrawString ( header , new Font( "宋体", 12,FontStyle.Bold) , Brushes.Black , new Point( 75 , 10 ) ) ;
   g.DrawString ( "单位:次" , new Font ( "宋体" , 9 ) , Brushes . Black , new Point(300 , 25 ) ) ;

   Point myRec = new Point ( 300 , 40 ) ;
   Point myDec = new Point ( 320 , 40 ) ;

         
   for(i=0;i<len;i++)
   {
    if(i==len-1){
     //s = 360-s;
     nflt[i] = 360-s;
    }
   
    g.DrawRectangle ( Pens.Black , myRec.X , myRec.Y , 20 , 10 ) ;
    //绘制小方块
    g.FillRectangle ( new SolidBrush( Return_Color( i ) ) , myRec.X , myRec.Y , 20 , 10 ) ;
    //填充小方块
    g.DrawString ( " " + sitem[i] + " " + num[i], new Font( "宋体" , 9 ) , Brushes.Black , myDec ) ;
    //绘制小方块右边的文字
    myRec.Y += 15 ;
    myDec.Y += 15 ;

    g.FillPie( new SolidBrush (Return_Color(i)) , 50 , 50 , 200 , 200 , s , nflt[i] ) ;
    g.DrawPie( Pens.Black , 50 , 50 , 200 , 200 , s , nflt[i]);
    s = s + nflt[i];   
   }
   Pen p = new Pen ( Color.Black , 1 ) ;
   g . DrawRectangle ( p , 1 , 1 , 398 , 298 ) ;
             bmp.Save ( Response.OutputStream , System.Drawing.Imaging.ImageFormat.Jpeg);
  }
  public Color Return_Color(int i){
   switch(i){
    case 0:
     return Color.Red;
     //break;
    case 1:
     return Color.Blue;
     //break;
    case 2:
     return Color.Yellow;
    case 3:
     return Color.Green;
     //break;
    case 4:
     return Color.Pink;
     //break;
    case 5:
     return Color.Plum;
     //break;
    case 6:
     return Color.Gray;
     //break;
    case 7:
     return Color.Salmon;
     //break;
    case 8:
     return Color.RosyBrown;
     //break;
    case 9:
     return Color.Teal;
     //break;
    case 10:
     return Color.Orange;
     //break;
    case 11:
     return Color.Thistle;
     //break;
    case 12:
     return Color.Maroon;
     //break;
    default:
     return Color.WhiteSmoke;
     //break;

   }

posted @ 2009-08-18 15:16  oraclejava  阅读(622)  评论(0)    收藏  举报