日期:2013-06-12  浏览次数:20399 次

 

using System;
using System.IO;//用于文件存取
using System.Data;//用于数据访问
using System.Drawing;//提供画GDI+图形的基本功能
using System.Drawing.Text;//提供画GDI+图形的高级功能
using System.Drawing.Drawing2D;//提供画高级二维,矢量图形功能
using System.Drawing.Imaging;//提供画GDI+图形的高级功能


namespace Drawpicture
 {
  /// <summary>
  /// BarChart 的摘要说明。
  /// </summary>
  public class BarChart
  {
   private   int Pic_Width = 410;
   private   int Pic_Height = 320;
           
   public static bool hasNeg = false;

   private const string FontWord = "Arial";
   private const int FontSize = 9;

   public  int SIDE_WIDTH = 400;
   public  int SIDE_HEIGHT = 400;
   private const int CHART_TOP = 60;
   private  int CHART_HEIGHT = 300;
   private const int CHART_LEFT = 60;
   private const int CHART_WIDTH = 300;

   public void Render(string[] word,int[] data, out string fileName)
   {
    
    for(int i=0;i<data.Length;i++)
    {
     if(data[i]<0)
     {
      Pic_Height *=2;
      hasNeg = true;
      SIDE_HEIGHT = (int)(SIDE_HEIGHT*1.5);
      CHART_HEIGHT =(int)(CHART_HEIGHT*0.3);
      break;
     }
    }
    ChartUtil cu = new ChartUtil();

    PointF[] zuoBiaoStart;
    PointF[] zuoBiaoEnd;
    Graphics g;
    Bitmap bm;
    createCanvas(out bm, out g, out zuoBiaoEnd, out zuoBiaoStart,cu);

    //画坐标轴
    int chiDu = drawAxes(data, zuoBiaoStart, g, zuoBiaoEnd,cu);

    //画条形图
    float barWidth = CHART_WIDTH / (2 * 2);
    PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0);
    float barHeight = 2;
    for(int i=0;i<2;i++)
    {
     barHeight = ((float)data[i]/chiDu) *(CHART_HEIGHT/5) ;
     if(barHeight<0)
     {
      barOrigin.Y = CHART_TOP + CHART_HEIGHT;
     }
     else
     {
      barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight;
     }
     
     g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,Math.Abs(barHeight));
     barOrigin.X = barOrigin.X + (barWidth * 2);
    }
    
  
    //画右上角的说明图形
    drawInstruction(CHART_LEFT, CHART_HEIGHT, CHART_TOP, g, word, data);

    //输出图形
    fileName = cu.PicPath + Guid.NewGuid().ToString() + ".gif";
    bm.Save(fileName, ImageFormat.Gif);
  
    //资源回收
    bm.Dispos