k线图表

来源:互联网 发布:淘宝店铺海报尺寸是 编辑:程序博客网 时间:2024/04/27 20:39

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace azhou88gupiao
{
 /// <summary>
 /// WebForm3 的摘要说明。
 /// </summary>
 public class WebForm3 : System.Web.UI.Page
 {
    private void Page_Load(object sender, System.EventArgs e)
     {
     LineChart c = new LineChart ( 640 , 480 , Page ) ;
     c . Title = " k线图表" ;
     c . Xorigin = 0 ;
     c . ScaleX = 2000 ;
     c . Xdivs = 20 ;//坐标的密度
     c . Yorigin = 0 ;
     c . ScaleY = 1000 ;
     c . Ydivs = 10 ;//坐标的密度
     c . AddValue ( 0 , 150 ) ;
     c . AddValue ( 50 , 50 ) ;
     c . AddValue ( 100 , 700 ) ;
     c . AddValue ( 200 , 150 ) ;
     c . AddValue ( 300 , 450 ) ;
     c . AddValue ( 400 , 75 ) ;
     c . AddValue ( 450 , 450 ) ;
     c . AddValue ( 500 , 250 ) ;
     c . AddValue ( 502 , 50 ) ;
     c . AddValue ( 540 , 250 ) ;
     c . AddValue ( 600 , 50 ) ;
     c . AddValue ( 700 , 250 ) ;
     c . AddValue ( 800 , 50 ) ;
     c . AddValue ( 900 , 250 ) ;
     c . AddValue ( 1000 , 50 ) ;
     c . AddValue ( 1100 , 250 ) ;
     c . AddValue ( 1200 , 250 ) ;
     c . Draw ( ) ;
     }
    class LineChart
     {
     public Bitmap b ;
     public string Title = "在ASP.NET中实现数据图表" ;
     public ArrayList chartValues = new ArrayList ( ) ;
     public float Xorigin = 0 , Yorigin = 0 ;
     public float ScaleX , ScaleY ;
     public float Xdivs = 2, Ydivs = 2 ;
     private int Width , Height ;
     private Graphics g ;
     private Page p ;
    struct datapoint
    {
     public float x ;
     public float y ;
     public bool valid ;
    }
    public LineChart ( int myWidth , int myHeight , Page myPage )
     {
     Width = myWidth ;
     Height = myHeight ;
     ScaleX = myWidth ;
     ScaleY = myHeight ;
     b = new Bitmap ( myWidth , myHeight ) ;
     g = Graphics . FromImage ( b ) ;
     p = myPage ;
     }

  
    public void AddValue ( int x , int y )
     {
     datapoint myPoint ;
     myPoint . x = x ;
     myPoint . y = y ;
     myPoint . valid = true ;
     chartValues . Add ( myPoint ) ;
     }
    public void Draw ( )
 {
     int i ;
     float x , y , x0 , y0 ;
     string myLabel ;
     Pen blackPen = new Pen ( Color . Blue , 2 ) ;
     Brush blackBrush = new SolidBrush ( Color . Black ) ;
     Font axesFont = new Font ( "arial" , 10 ) ;
     //首先要创建图片的大小
     p . Response . ContentType = "image/jpeg" ;
     g . FillRectangle ( new SolidBrush ( Color . LightGreen ) , 0 , 0 , Width , Height ) ;
     int ChartInset = 25 ;
     int ChartWidth = Width - ( 2 * ChartInset ) ;
     int ChartHeight = Height - ( 2 * ChartInset ) ;
     g . DrawRectangle ( new Pen ( Color . Black , 1 ) , ChartInset , ChartInset , ChartWidth , ChartHeight ) ;
     //写出图片上面的图片内容文字
     g . DrawString ( Title , new Font ( "arial" , 14 ) , blackBrush , Width / 3 , 10 ) ;
     //沿X坐标写入X标签
    for ( i = 0 ; i <= Xdivs ; i++ )
      {
       x = ChartInset + ( i * ChartWidth ) / Xdivs ;
       y = ChartHeight + ChartInset ;
       myLabel = ( Xorigin + ( ScaleX * i / Xdivs ) ) . ToString ( ) ;
       g . DrawString ( myLabel , axesFont , blackBrush , x - 4 , y + 10 ) ;
       g . DrawLine ( blackPen , x , y + 2 , x , y - 2 ) ;
      }
     /////////
    for ( i = 0 ; i <= Ydivs ; i++ )
      {
       x = ChartInset ;
       y = ChartHeight + ChartInset - ( i * ChartHeight / Ydivs ) ;
       myLabel = ( Yorigin + ( ScaleY * i / Ydivs ) ) . ToString ( ) ;
       g . DrawString ( myLabel , axesFont , blackBrush , 5 , y - 6 ) ;
       g . DrawLine ( blackPen , x + 2 , y , x - 2 , y ) ;
      }
     g . RotateTransform ( 180 ) ;
     g . TranslateTransform ( 0 , - Height ) ;
     g . TranslateTransform ( - ChartInset , ChartInset ) ;
     g . ScaleTransform ( - 1 , 1 ) ;

     datapoint prevPoint = new datapoint ( ) ;
    prevPoint . valid = false ;
     foreach ( datapoint myPoint in chartValues )
       {
       if ( prevPoint . valid == true )
        {
        x0 = ChartWidth * ( prevPoint . x - Xorigin ) / ScaleX ;
        y0 = ChartHeight * ( prevPoint . y - Yorigin ) / ScaleY ;
        x = ChartWidth * ( myPoint . x - Xorigin ) / ScaleX ;
        y = ChartHeight * ( myPoint . y - Yorigin ) / ScaleY ;
        g . DrawLine ( blackPen , x0 , y0 , x , y ) ;
        g . FillEllipse ( blackBrush , x0 - 1 , y0 - 1 , 4 , 4 ) ;
        g . FillEllipse ( blackBrush , x -1 , y -1 , 4 , 4 ) ;
        }
            
     prevPoint = myPoint ;
 }
     b . Save ( p . Response . OutputStream , ImageFormat . Jpeg ) ;
  }
    LineChart ( )
    {
     g . Dispose ( ) ;
     b . Dispose ( ) ;
    }
   }


  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion
 }
}

原创粉丝点击