c#绘制曲线图 类
首先创建一个类Curve.cs
注意引用命名空间
注意引用命名空间
 using System.Drawing;
using System.Drawing;Curve.cs内容如下:
 public class Curve
public class Curve {
{ public Curve()
    public Curve() {
    { //
        // // TODO: 在此处添加构造函数逻辑
        // TODO: 在此处添加构造函数逻辑 //
        // }
    } private Graphics objGraphics; //Graphics 类提供将对象绘制到显示设备的方法
    private Graphics objGraphics; //Graphics 类提供将对象绘制到显示设备的方法 private Bitmap objBitmap; //位图对象
    private Bitmap objBitmap; //位图对象
 private int m_Width = 640; //图像宽度
    private int m_Width = 640; //图像宽度 private int m_Height = 480; //图像高度
    private int m_Height = 480; //图像高度 private float m_XSlice = 50; //X轴刻度宽度
    private float m_XSlice = 50; //X轴刻度宽度 private float m_YSlice = 50; //Y轴刻度宽度
    private float m_YSlice = 50; //Y轴刻度宽度 private float m_YSliceValue = 20; //Y轴刻度的数值宽度
    private float m_YSliceValue = 20; //Y轴刻度的数值宽度 private float m_YSliceBegin = 0; //Y轴刻度开始值
    private float m_YSliceBegin = 0; //Y轴刻度开始值 private float m_Tension = 0.5f;//设置张力
    private float m_Tension = 0.5f;//设置张力 private string m_Title = "节目访问量曲线图"; //Title
    private string m_Title = "节目访问量曲线图"; //Title private string m_Unit = "万元"; //单位
    private string m_Unit = "万元"; //单位 private string m_XAxisText = "日期"; //X轴说明文字
    private string m_XAxisText = "日期"; //X轴说明文字 private string m_YAxisText = "次"; //Y轴说明文字
    private string m_YAxisText = "次"; //Y轴说明文字 private string[] m_Keys = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" }; //键
    private string[] m_Keys = new string[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" }; //键 private int[] m_Values = new int[] {32,12,32,43,54,35,35,42,63,35,35,67 };//值
    private int[] m_Values = new int[] {32,12,32,43,54,35,35,42,63,35,35,67 };//值 private Color m_BgColor = Color.Snow; //背景
    private Color m_BgColor = Color.Snow; //背景 private Color m_TextColor = Color.Black; //文字颜色
    private Color m_TextColor = Color.Black; //文字颜色 private Color m_BorderColor = Color.Black; //整体边框颜色
    private Color m_BorderColor = Color.Black; //整体边框颜色 private Color m_AxisColor = Color.Black; //轴线颜色
    private Color m_AxisColor = Color.Black; //轴线颜色 private Color m_AxisTextColor = Color.Black; //轴说明文字颜色
    private Color m_AxisTextColor = Color.Black; //轴说明文字颜色 private Color m_SliceTextColor = Color.Black; //刻度文字颜色
    private Color m_SliceTextColor = Color.Black; //刻度文字颜色 private Color m_SliceColor = Color.Black; //刻度颜色
    private Color m_SliceColor = Color.Black; //刻度颜色 private Color m_CurveColor = Color.Red; //曲线颜色
    private Color m_CurveColor = Color.Red; //曲线颜色
 public int Width
    public int Width {
    { set
        set {
        { if (value < 300)
            if (value < 300) {
            { m_Width = 300;
                m_Width = 300; }
            } else
            else {
            { m_Width = value;
                m_Width = value; }
            } }
        } get
        get {
        { return m_Width;
            return m_Width; }
        } }
    }
 public int Height
    public int Height {
    { set
        set {
        { if (value < 300)
            if (value < 300) {
            { m_Height = 300;
                m_Height = 300; }
            } else
            else {
            { m_Height = value;
                m_Height = value; }
            } }
        } get
        get {
        { return m_Height;
            return m_Height; }
        } }
    }
 public float XSlice
    public float XSlice {
    { set
        set {
        { m_XSlice = value;
            m_XSlice = value; }
        } get
        get {
        { return m_XSlice;
            return m_XSlice; }
        } }
    }
 public float YSlice
    public float YSlice {
    { set
        set {
        { m_YSlice = value;
            m_YSlice = value; }
        } get
        get {
        { return m_YSlice;
            return m_YSlice; }
        } }
    }
 public float YSliceValue
    public float YSliceValue {
    { set
        set {
        { m_YSliceValue = value;
            m_YSliceValue = value; }
        } get
        get {
        { return m_YSliceValue;
            return m_YSliceValue; }
        } }
    }
 public float YSliceBegin
    public float YSliceBegin {
    { set
        set {
        { m_YSliceBegin = value;
            m_YSliceBegin = value; }
        } get
        get {
        { return m_YSliceBegin;
            return m_YSliceBegin; }
        } }
    }
 public float Tension
    public float Tension {
    { set
        set {
        { if (value < 0.0f && value > 1.0f)
            if (value < 0.0f && value > 1.0f) {
            { m_Tension = 0.5f;
                m_Tension = 0.5f; }
            } else
            else {
            { m_Tension = value;
                m_Tension = value; }
            } }
        } get
        get {
        { return m_Tension;
            return m_Tension; }
        } }
    }
 public string Title
    public string Title {
    { set
        set {
        { m_Title = value;
            m_Title = value; }
        } get
        get {
        { return m_Title;
            return m_Title; }
        } }
    }
 public string Unit
    public string Unit {
    { set
        set {
        { m_Unit = value;
            m_Unit = value; }
        } get
        get {
        { return m_Unit;
            return m_Unit; }
        } }
    }
 public string[] Keys
    public string[] Keys {
    { set
        set {
        { m_Keys = value;
            m_Keys = value; }
        } get
        get {
        { return m_Keys;
            return m_Keys; }
        } }
    }
 public int[] Values
    public int[] Values {
    { set
        set {
        { m_Values = value;
            m_Values = value; }
        } get
        get {
        { return m_Values;
            return m_Values; }
        } }
    }
 public Color BgColor
    public Color BgColor {
    { set
        set {
        { m_BgColor = value;
            m_BgColor = value; }
        } get
        get {
        { return m_BgColor;
            return m_BgColor; }
        } }
    }
 public Color TextColor
    public Color TextColor {
    { set
        set {
        { m_TextColor = value;
            m_TextColor = value; }
        } get
        get {
        { return m_TextColor;
            return m_TextColor; }
        } }
    }
 public Color BorderColor
    public Color BorderColor {
    { set
        set {
        { m_BorderColor = value;
            m_BorderColor = value; }
        } get
        get {
        { return m_BorderColor;
            return m_BorderColor; }
        } }
    }
 public Color AxisColor
    public Color AxisColor {
    { set
        set {
        { m_AxisColor = value;
            m_AxisColor = value; }
        } get
        get {
        { return m_AxisColor;
            return m_AxisColor; }
        } }
    }
 public string XAxisText
    public string XAxisText {
    { set
        set {
        { m_XAxisText = value;
            m_XAxisText = value; }
        } get
        get {
        { return m_XAxisText;
            return m_XAxisText; }
        } }
    }
 public string YAxisText
    public string YAxisText {
    { set
        set {
        { m_YAxisText = value;
            m_YAxisText = value; }
        } get
        get {
        { return m_YAxisText;
            return m_YAxisText; }
        } }
    }
 public Color AxisTextColor
    public Color AxisTextColor {
    { set
        set {
        { m_AxisTextColor = value;
            m_AxisTextColor = value; }
        } get
        get {
        { return m_AxisTextColor;
            return m_AxisTextColor; }
        } }
    }
 public Color SliceTextColor
    public Color SliceTextColor {
    { set
        set {
        { m_SliceTextColor = value;
            m_SliceTextColor = value; }
        } get
        get {
        { return m_SliceTextColor;
            return m_SliceTextColor; }
        } }
    }
 public Color SliceColor
    public Color SliceColor {
    { set
        set {
        { m_SliceColor = value;
            m_SliceColor = value; }
        } get
        get {
        { return m_SliceColor;
            return m_SliceColor; }
        } }
    }
 public Color CurveColor
    public Color CurveColor {
    { set
        set {
        { m_CurveColor = value;
            m_CurveColor = value; }
        } get
        get {
        { return m_CurveColor;
            return m_CurveColor; }
        } }
    }

 //生成图像并返回bmp图像对象
    //生成图像并返回bmp图像对象 public Bitmap CreateImage()
    public Bitmap CreateImage() {
    { InitializeGraph();
        InitializeGraph();
 DrawContent(ref objGraphics);
        DrawContent(ref objGraphics);
 return objBitmap;
        return objBitmap; }
    }
 //初始化和填充图像区域,画出边框,初始标题
    //初始化和填充图像区域,画出边框,初始标题 private void InitializeGraph()
    private void InitializeGraph() {
    {
 //根据给定的高度和宽度创建一个位图图像
        //根据给定的高度和宽度创建一个位图图像 objBitmap = new Bitmap(Width, Height);
        objBitmap = new Bitmap(Width, Height);
 //从指定的 objBitmap 对象创建 objGraphics 对象 (即在objBitmap对象中画图)
        //从指定的 objBitmap 对象创建 objGraphics 对象 (即在objBitmap对象中画图) objGraphics = Graphics.FromImage(objBitmap);
        objGraphics = Graphics.FromImage(objBitmap);
 //根据给定颜色(LightGray)填充图像的矩形区域 (背景)
        //根据给定颜色(LightGray)填充图像的矩形区域 (背景) objGraphics.DrawRectangle(new Pen(BorderColor, 1), 0, 0, Width, Height);
        objGraphics.DrawRectangle(new Pen(BorderColor, 1), 0, 0, Width, Height); objGraphics.FillRectangle(new SolidBrush(BgColor), 1, 1, Width - 2, Height - 2);
        objGraphics.FillRectangle(new SolidBrush(BgColor), 1, 1, Width - 2, Height - 2);
 //画X轴,pen,x1,y1,x2,y2 注意图像的原始X轴和Y轴计算是以左上角为原点,向右和向下计算的
        //画X轴,pen,x1,y1,x2,y2 注意图像的原始X轴和Y轴计算是以左上角为原点,向右和向下计算的 objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor), 1), 100, Height - 100, Width - 75, Height - 100);
        objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor), 1), 100, Height - 100, Width - 75, Height - 100);
 //画Y轴,pen,x1,y1,x2,y2
        //画Y轴,pen,x1,y1,x2,y2 objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor), 1), 100, Height - 100, 100, 75);
        objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor), 1), 100, Height - 100, 100, 75);
 //初始化轴线说明文字
        //初始化轴线说明文字 SetAxisText(ref objGraphics);
        SetAxisText(ref objGraphics);
 //初始化X轴上的刻度和文字
        //初始化X轴上的刻度和文字 SetXAxis(ref objGraphics);
        SetXAxis(ref objGraphics);
 //初始化Y轴上的刻度和文字
        //初始化Y轴上的刻度和文字 SetYAxis(ref objGraphics);
        SetYAxis(ref objGraphics);
 //初始化标题
        //初始化标题 CreateTitle(ref objGraphics);
        CreateTitle(ref objGraphics); }
    }
 private void SetAxisText(ref Graphics objGraphics)
    private void SetAxisText(ref Graphics objGraphics) {
    { objGraphics.DrawString(XAxisText, new Font("宋体", 10), new SolidBrush(AxisTextColor), Width / 2 - 50, Height - 50);
        objGraphics.DrawString(XAxisText, new Font("宋体", 10), new SolidBrush(AxisTextColor), Width / 2 - 50, Height - 50);
 int X = 30;
        int X = 30; int Y = (Height / 2) - 50;
        int Y = (Height / 2) - 50; for (int i = 0; i < YAxisText.Length; i++)
        for (int i = 0; i < YAxisText.Length; i++) {
        { objGraphics.DrawString(YAxisText[i].ToString(), new Font("宋体", 10), new SolidBrush(AxisTextColor), X, Y);
            objGraphics.DrawString(YAxisText[i].ToString(), new Font("宋体", 10), new SolidBrush(AxisTextColor), X, Y); Y += 15;
            Y += 15; }
        } }
    }
 private void SetXAxis(ref Graphics objGraphics)
    private void SetXAxis(ref Graphics objGraphics) {
    { int x1 = 100;
        int x1 = 100; int y1 = Height - 110;
        int y1 = Height - 110; int x2 = 100;
        int x2 = 100; int y2 = Height - 90;
        int y2 = Height - 90; int iCount = 0;
        int iCount = 0; int iSliceCount = 1;
        int iSliceCount = 1; float Scale = 0;
        float Scale = 0; int iWidth = (int)((Width - 200) * (50 / XSlice));
        int iWidth = (int)((Width - 200) * (50 / XSlice));
 objGraphics.DrawString(Keys[0].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), 85, Height - 90);
        objGraphics.DrawString(Keys[0].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), 85, Height - 90);
 for (int i = 0; i <= iWidth; i += 10)
        for (int i = 0; i <= iWidth; i += 10) {
        { Scale = i * (XSlice / 50);
            Scale = i * (XSlice / 50);
 if (iCount == 5)
            if (iCount == 5) {
            { objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)), x1 + Scale, y1, x2 + Scale, y2);
                objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)), x1 + Scale, y1, x2 + Scale, y2); //The Point!这里显示X轴刻度
                //The Point!这里显示X轴刻度 if (iSliceCount <= Keys.Length - 1)
                if (iSliceCount <= Keys.Length - 1) {
                { objGraphics.DrawString(Keys[iSliceCount].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), x1 + Scale - 15, y2);
                    objGraphics.DrawString(Keys[iSliceCount].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), x1 + Scale - 15, y2); }
                } else
                else {
                { //超过范围,不画任何刻度文字
                    //超过范围,不画任何刻度文字 }
                } iCount = 0;
                iCount = 0; iSliceCount++;
                iSliceCount++; if (x1 + Scale > Width - 100)
                if (x1 + Scale > Width - 100) {
                { break;
                    break; }
                } }
            } else
            else {
            { objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)), x1 + Scale, y1 + 5, x2 + Scale, y2 - 5);
                objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)), x1 + Scale, y1 + 5, x2 + Scale, y2 - 5); }
            } iCount++;
            iCount++; }
        } }
    }
 private void SetYAxis(ref Graphics objGraphics)
    private void SetYAxis(ref Graphics objGraphics) {
    { int x1 = 95;
        int x1 = 95; int y1 = (int)(Height - 100 - 10 * (YSlice / 50));
        int y1 = (int)(Height - 100 - 10 * (YSlice / 50)); int x2 = 105;
        int x2 = 105; int y2 = (int)(Height - 100 - 10 * (YSlice / 50));
        int y2 = (int)(Height - 100 - 10 * (YSlice / 50)); int iCount = 1;
        int iCount = 1; float Scale = 0;
        float Scale = 0; int iSliceCount = 1;
        int iSliceCount = 1;
 int iHeight = (int)((Height - 200) * (50 / YSlice));
        int iHeight = (int)((Height - 200) * (50 / YSlice));
 objGraphics.DrawString(YSliceBegin.ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), 60, Height - 110);
        objGraphics.DrawString(YSliceBegin.ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), 60, Height - 110);
 for (int i = 0; i < iHeight; i += 10)
        for (int i = 0; i < iHeight; i += 10) {
        { Scale = i * (YSlice / 50);
            Scale = i * (YSlice / 50);
 if (iCount == 5)
            if (iCount == 5) {
            { objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)), x1 - 5, y1 - Scale, x2 + 5, y2 - Scale);
                objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)), x1 - 5, y1 - Scale, x2 + 5, y2 - Scale); //The Point!这里显示Y轴刻度
                //The Point!这里显示Y轴刻度 objGraphics.DrawString(Convert.ToString(YSliceValue * iSliceCount + YSliceBegin), new Font("宋体", 10), new SolidBrush(SliceTextColor), 60, y1 - Scale);
                objGraphics.DrawString(Convert.ToString(YSliceValue * iSliceCount + YSliceBegin), new Font("宋体", 10), new SolidBrush(SliceTextColor), 60, y1 - Scale);
 iCount = 0;
                iCount = 0; iSliceCount++;
                iSliceCount++; }
            } else
            else {
            { objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)), x1, y1 - Scale, x2, y2 - Scale);
                objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)), x1, y1 - Scale, x2, y2 - Scale); }
            } iCount++;
            iCount++; }
        } }
    }
 private void DrawContent(ref Graphics objGraphics)
    private void DrawContent(ref Graphics objGraphics) {
    { if (Keys.Length == Values.Length)
        if (Keys.Length == Values.Length) {
        { Pen CurvePen = new Pen(CurveColor, 1);
            Pen CurvePen = new Pen(CurveColor, 1); PointF[] CurvePointF = new PointF[Keys.Length];
            PointF[] CurvePointF = new PointF[Keys.Length]; float keys = 0;
            float keys = 0; float values = 0;
            float values = 0; float Offset1 = (Height - 100) + YSliceBegin;
            float Offset1 = (Height - 100) + YSliceBegin; float Offset2 = (YSlice / 50) * (50 / YSliceValue);
            float Offset2 = (YSlice / 50) * (50 / YSliceValue);
 for (int i = 0; i < Keys.Length; i++)
            for (int i = 0; i < Keys.Length; i++) {
            { keys = XSlice * i + 100;
                keys = XSlice * i + 100; values = Offset1 - Values[i] * Offset2;
                values = Offset1 - Values[i] * Offset2; CurvePointF[i] = new PointF(keys, values);
                CurvePointF[i] = new PointF(keys, values); }
            } objGraphics.DrawCurve(CurvePen, CurvePointF, Tension);
            objGraphics.DrawCurve(CurvePen, CurvePointF, Tension); }
        } else
        else {
        { objGraphics.DrawString("Error!The length of Keys and Values must be same!", new Font("宋体", 16), new SolidBrush(TextColor), new Point(150, Height / 2));
            objGraphics.DrawString("Error!The length of Keys and Values must be same!", new Font("宋体", 16), new SolidBrush(TextColor), new Point(150, Height / 2)); }
        } }
    }
 //初始化标题
    //初始化标题 private void CreateTitle(ref Graphics objGraphics)
    private void CreateTitle(ref Graphics objGraphics) {
    { objGraphics.DrawString(Title, new Font("宋体", 16), new SolidBrush(TextColor), new Point(5, 5));
        objGraphics.DrawString(Title, new Font("宋体", 16), new SolidBrush(TextColor), new Point(5, 5)); }
    } }
}
页面调用如下:
注意引用命名空间
 using System.Drawing;
using System.Drawing; using System.Drawing.Imaging;
using System.Drawing.Imaging; protected void Page_Load(object sender, EventArgs e)
protected void Page_Load(object sender, EventArgs e) {
    { Image1.ImageUrl = Server.MapPath("IMG/Curve.jpg");
        Image1.ImageUrl = Server.MapPath("IMG/Curve.jpg"); Image1.Visible = false;
        Image1.Visible = false; }
    } protected void Button1_Click(object sender, EventArgs e)
    protected void Button1_Click(object sender, EventArgs e) {
    { Curve curve2d = new Curve(); //定义一个画图类实例
        Curve curve2d = new Curve(); //定义一个画图类实例 
         Bitmap bmp = curve2d.CreateImage();
        Bitmap bmp = curve2d.CreateImage(); bmp.Save(Server.MapPath("IMG/Curve.jpg"), ImageFormat.Jpeg);
       bmp.Save(Server.MapPath("IMG/Curve.jpg"), ImageFormat.Jpeg); 
         Image1.Visible = true;
       Image1.Visible = true; }
    }0 
0 
 
(请您对文章做出评价)
 
                     
                    
                 
                    
                 
 
        

 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号