• 天志(六子)的曲线走势图 荣


    €下面是写的一个画曲线走势图的自定义控件Curve.ascx的源代码,放在这儿,以免忘记了。
    画出的图片如下:
    天志(六子)的曲线走势图
    下面是代码:
    /// <copyright>天志(六子)  1989-2006</copyright>
    /// <version>1.0</version>
    /// <author>天志</author>
    /// <email></email>
    /// <log date="2006-11-10">创建</log>


    namespace MyBank.UI
    {
        
    using System;
        
    using System.Data;
        
    using System.Drawing;
        
    using System.Drawing.Imaging;
        
    using System.Web;
        
    using System.Web.UI.WebControls;
        
    using System.Web.UI.HtmlControls;

        
    using DOTNET.Utils;

        
    using Data;
        
    using Business.Interface;

        
    /// <summary>
        
    ///    天志(六子)的曲线走势图。
        
    /// </summary>
        
    /// <author>天志</author>
        
    /// <log date="2006-11-10">创建</log>

        public class Curve : System.Web.UI.UserControl
        
    {

            
    private void Page_Load(object sender, System.EventArgs e)
            
    {
                
    // 绘制曲线走势图
                InitializeGraph();
            }


            
    /// <summary>
            
    /// 画图板的宽度。
            
    /// </summary>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            int Width 
            
    {
                
    get
                
    {
                    
    return (5*widthNum) + 200;
                }

            }


            
    /// <summary>
            
    /// 画图板的高度。
            
    /// </summary>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            int Height = 520;

            
    /// <summary>
            
    /// 曲线图的节点数。
            
    /// </summary>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            int widthNum
            
    {
                
    get
                
    {
                    
    return 164;
                }

            }


            
    /// <summary>
            
    /// 画图板中的纵轴刻度数。
            
    /// </summary>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            int heigthNum = 300;

            
    /// <summary>
            
    /// 绘制曲线走势图。
            
    /// </summary>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            private void InitializeGraph()
            
    {
                
                
    // 根据给定的高度和宽度创建一个位图图像
                Bitmap objBitmap = new Bitmap(Width, Height);

                
    // 从指定的 objBitmap 对象创建 objGraphics 对象 (即在objBitmap对象中画图)
                Graphics objGraphics = Graphics.FromImage(objBitmap);

                
    // 设置画图板边框颜色
                objGraphics.DrawRectangle
                    (
                    
    new Pen(Color.Green, 1),
                    
    0,
                    
    0,
                    Width,
                    Height
                    );

                
    // 填充画图板
                objGraphics.FillRectangle
                    (
    new SolidBrush(Color.LightSteelBlue),
                    
    1,
                    
    1,
                    (Width 
    - 2),
                    (Height 
    - 2)
                    );

                
    // 在某一高度画一条横线
                objGraphics.DrawLine
                    (
                    
    new Pen(new SolidBrush(Color.Aqua), 1),
                    
    100,
                    (Height 
    - 100),
                    (Width 
    - 75),
                    (Height 
    - 100)
                    );

                
    // 在某一处画一条直立的直线
                objGraphics.DrawLine
                    (
                    
    new Pen(new SolidBrush(Color.Aqua), 1),
                    
    100,
                    (Height 
    - 100),
                    
    100,
                    
    75);

                
    初始化轴线说明文字

                
    // 初始化X轴上的刻度和文字
                SetXAxis(ref objGraphics);

                
    // 初始化Y轴上的刻度和文字
                SetYAxis(ref objGraphics);

                
    // 初始化标题
                CreateTitle(ref objGraphics);

                DrawContent(
    ref objGraphics);

                
    // 将objGraphics对象以指定的图形格式(这里是Gif)保存到指定的Stream对象,并输出到客户端。 
                objBitmap.Save(HttpContext.Current.Response.OutputStream, ImageFormat.Gif);
                
            }


            

            
    /// <summary>
            
    /// 设置画图板横轴的刻度。
            
    /// </summary>
            
    /// <param name="objGraphics"></param>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            private  void SetXAxis(ref Graphics objGraphics)
            
    {
                
    int x1 = 100;
                
    int y1 = Height - 110;
                
    int x2 = 100;
                
    int y2 = Height - 90;

                
    // 判断是否为7的标记
                int iCount = 0;

                
    // 刻度尺的纵轴坐标点
                float Scale = 0;

                
    // 取得每个刻度的大小
                int iWidth = Width - 200;

                
    // 画出横轴开始点
                objGraphics.DrawString
                    (
                    
    "开始",
                    
    new Font("宋体"8),
                    
    new SolidBrush(Color.Blue),
                    
    85,
                    (Height
    -90)
                    );

                
    // 设置横轴的刻度
                for(int i = 0; i <= widthNum; i++)
                
    {
                    
    // 如果横轴等于7(间隔一周),则画一个长刻度
                    if(iCount == 7)
                    
    {
                        
    // 画出刻度
                        objGraphics.DrawLine
                            (
                            
    new Pen(new SolidBrush(Color.Red)),
                            (x1 
    + Scale),
                            y1,
                            (x2 
    +Scale),
                            y2
                            );

                        
    // 画上刻度标记
                        objGraphics.DrawString
                            (
                            i.ToString(),
                            
    new Font("宋体"8),
                            
    new SolidBrush(Color.Black),
                            (x1 
    + Scale - 15),
                            y2
                            );

                        iCount 
    = 0;
                    }

                    
    else
                    
    {
                        
    // 画一个短刻度
                        objGraphics.DrawLine
                            (
                            
    new Pen(new SolidBrush(Color.Red)),
                            (x1 
    + Scale),
                            (y1 
    + 5),
                            (x2 
    + Scale),
                            (y2 
    - 5)
                            );
                    }

                    
                    iCount
    ++;
                    Scale 
    += 5;
                }

            }
        

            
    /// <summary>
            
    /// 设置画图板纵轴的刻度。
            
    /// </summary>
            
    /// <param name="objGraphics"></param>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            private void SetYAxis(ref Graphics objGraphics)
            
    {
                
    int x1 = 95
                
    int y1 = Height - 100;
                
    int x2 = 105;
                
    int y2 = Height - 100;
                
    int iCount = 1;
                
    float Scale = 0;            

                
    // 画出纵轴的开始点
                objGraphics.DrawString
                    (
                    
    "开始",
                    
    new Font("宋体"10),
                    
    new SolidBrush(Color.Blue),
                    
    60,
                    (Height 
    - 110)
                    );

                
    for(int i = 0; i < heigthNum; i++)
                
    {
                    
    // 如果纵轴等于10,则画一个长刻度
                    if (iCount == 10)
                    
    {
                        
    // 画出刻度
                        objGraphics.DrawLine
                            (
                            
    new Pen(new SolidBrush(Color.Red)),
                            (x1 
    - 5),
                            (y1 
    - Scale),
                            (x2 
    + 5),
                            (y2 
    - Scale)
                            );

                        iCount 
    = 0;
                    }

                    
    else
                    
    {                    
                        
    // 画出刻度
                        objGraphics.DrawLine
                            (
                            
    new Pen(new SolidBrush(Color.Red)),
                            (x1 
    + 5),
                            (y1
    -Scale),
                            (x2 
    - 5),
                            (y2 
    - Scale)
                            );

                        
    if (iCount == 1)
                        
    {                        
                            
    // 画上刻度标记
                            objGraphics.DrawString
                                (
                                Convert.ToString((i 
    + "")),
                                
    new Font("宋体"8),
                                
    new SolidBrush(Color.Black),
                                
    60,
                                (y1 
    - Scale)
                                );
                        }

                    }

                    iCount
    ++;
                    Scale 
    += 1;
                }

            }


            

            
    /// <summary>
            
    /// 设置图片标题。
            
    /// </summary>
            
    /// <param name="objGraphics"></param>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            private void CreateTitle(ref Graphics objGraphics)
            
    {
                
    // 设置图片标题
                objGraphics.DrawString(
                    
    "天志(六子)的曲线走势图",
                    
    new Font("宋体",16),
                    
    new SolidBrush(Color.Blue),
                    
    new Point(5,5));
            }
            

            
    /// <summary>
            
    /// 绘制曲线图。
            
    /// </summary>
            
    /// <param name="objGraphics"></param>
            
    /// <author>天志</author>
            
    /// <log date="2006-11-10">创建</log>

            private void DrawContent(ref Graphics objGraphics)
            
    {
                
    // 存储曲线上的节点数组
                float[] floatArr = new float[164];

                
    // 取得一个随机数 
                Random Seed = new Random();
            
    int randomNum = Seed.Next(1100);

                
    // 给节点数组赋值 
                for (int i = 0; i < 164; i++)
                
    {
                    randomNum 
    = Seed.Next(110);
                    floatArr[i] 
    = (randomNum*10+ 150;
                }


                
    // 设置绘制画笔  
                Pen CurvePen = new Pen(Color.Red, 1);
                PointF[] CurvePointF 
    = new PointF[widthNum];

                
    // 开始的画板横轴
                float keys = 0;

                
    // 节点纵轴位置
                float values = 0;

                
    // 开始的画板纵轴
                float Offset1 = Height - 100;

                
    for(int i = 0;i < widthNum; i++)
                
    {
                    
    // 设置画板横轴位置
                    keys = (5*i) + 100;

                    
    // 取得节点纵轴位置
                    values = Offset1 - floatArr[i];

                    
    // 设置绘制节点
                    CurvePointF[i] = new PointF(keys, values);
                }


                
    // 绘制曲线
                objGraphics.DrawCurve
                    (
                    CurvePen,
                    CurvePointF,
                    
    1.0F
                    );
            }


            
    Web 窗体设计器生成的代码
        }

    }



    本源代码参照种玉堂的《先发个绘制曲线图的:用ASP.NET with C# 绘制曲线图(Curve图) 》[URL:http://www.cnblogs.com/KenBlove/archive/2006/10/23/461082.html#537662]
  • 相关阅读:
    Java之JVM调优案例分析与实战(4)
    Qt浅谈之四十九俄罗斯方块(代码来自网络)
    自作聪明的开发
    Visual Studio 连接 SQL Server 的connectionStringz和
    删除反复行SQL举例
    一起学android之怎样设置TextView中不同字段的字体颜色(22)
    A008-drawable资源
    android 自己定义组件随着手指自己主动画圆
    一个简单的HTML5摇一摇实例
    关于事件的传递机制。
  • 原文地址:https://www.cnblogs.com/admin11/p/557139.html
Copyright © 2020-2023  润新知