您的位置:首页 > 编程语言 > C#

C# 绘制曲线图,并保存为Gif格式文件 调试通过

2014-05-04 19:03 363 查看
protected void ShowImage()

    {

        //数据初始化

        string[] month = new string[12] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };

        int[] d = new int[12] { 23, 66, 38, 56, 39, 79, 75, 142, 134, 112, 134, 127 };

        //画图初始化

        Bitmap bMap = new Bitmap(800, 500);

        Graphics gph = Graphics.FromImage(bMap);

        gph.Clear(Color.LightCyan);

        //画边框

        Pen p = new Pen(Color.Black, 2);

        gph.DrawRectangle(p, 1, 1, 798, 498);

        //中心点

        PointF cPt = new PointF(60, 460);

        //X轴三角形

        PointF[] xPt = new PointF[3] { new PointF(700 + 15, cPt.Y), new PointF(700, cPt.Y - 4), new PointF(700, cPt.Y + 4) };

        //Y轴三角形

        PointF[] yPt = new PointF[3] { new PointF(cPt.X, cPt.X - 15), new PointF(cPt.X - 4, cPt.X), new PointF(cPt.X + 4, cPt.X) };

        //图表标题

        gph.DrawString("51Venue场地客户月访问走势图", new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + 60, cPt.X));

        //画X轴

        gph.DrawLine(Pens.Black, cPt.X, cPt.Y, 700, cPt.Y);

        gph.DrawPolygon(Pens.Black, xPt);

        gph.FillPolygon(new SolidBrush(Color.Black), xPt);

        gph.DrawString("月份", new Font("宋体", 9), Brushes.Black, new PointF(720, 455));

        //画Y轴

        gph.DrawLine(Pens.Black, cPt.X, cPt.Y, cPt.X, cPt.X);

        gph.DrawPolygon(Pens.Black, yPt);

        gph.FillPolygon(new SolidBrush(Color.Black), yPt);

        gph.DrawString("单位(家)", new Font("宋体", 9), Brushes.Black, new PointF(25, 30));

        //画Y轴刻度

        for (int i = 1; i <= 20; i++)

        {

            gph.DrawString((i * 10).ToString(), new Font("宋体", 9), Brushes.Black, new PointF(cPt.X - 30, cPt.Y - i * 20 - 6));

            gph.DrawLine(Pens.Black, cPt.X - 3, cPt.Y - i * 20, cPt.X, cPt.Y - i * 20);

        }

        //画X轴刻度

        for (int i = 1; i <= month.Length; i++)

        {

            gph.DrawString(month[i - 1], new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + i * 50 - 5, cPt.Y + 10));

            gph.DrawLine(Pens.Black, cPt.X + i * 50, cPt.Y, cPt.X + i * 50, cPt.Y - 3);

        }

        //画数据走势图

        for (int i = 1; i <= 12; i++)

        {

            //画折线

            if (i < 12)

            {

                gph.DrawLine(new Pen(Color.GreenYellow, 2), cPt.X + i * 50, cPt.Y - d[i - 1] * 2, cPt.X + i * 50 + 50, cPt.Y - d[i] * 2);

            }

            //画点

            gph.DrawEllipse(Pens.Red, cPt.X + i * 50 - 2, cPt.Y - d[i - 1] * 2 - 2, 4, 4);

            gph.FillEllipse(new SolidBrush(Color.White), cPt.X + i * 50 - 2, cPt.Y - d[i - 1] * 2 - 2, 4, 4);

            if (i < 12)

            {

                if (d[i - 1] <= 0)

                {

                    //画数值

                    gph.DrawString(d[i - 1].ToString(), new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + i * 50 - 10, cPt.Y - d[i - 1] * 2 - 15));

                }

                else

                {

                    if (d[i - 1] < d[i])

                    {

                        gph.DrawString(d[i - 1].ToString(), new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + i * 50, cPt.Y - d[i - 1] * 2 + 15));

                    }

                    else

                    {

                        gph.DrawString(d[i - 1].ToString(), new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + i * 50 + 5, cPt.Y - d[i - 1] * 2 - 15));

                    }

                }

            }

            else

            {

                gph.DrawString(d[i - 1].ToString(), new Font("宋体", 9), Brushes.Black, new PointF(cPt.X + i * 50 + 5, cPt.Y - d[i - 1] * 2 + 15));

            }

        }

        //保存输出图片,图片位置在你所建项目的Debug目录下

        bMap.Save("图片名.Gif", System.Drawing.Imaging.ImageFormat.Gif);//winform下

//bMap.Save(Server.MapPath("图片名.gif"), ImageFormat.Gif)=//webform下

b3f6
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息