在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#图形和图像处理 → C# 直角坐标系(绘图实例)

C# 直角坐标系(绘图实例)

C#图形和图像处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.08M
  • 下载次数:133
  • 浏览次数:1713
  • 发布时间:2018-04-20
  • 实例类别:C#图形和图像处理
  • 发 布 人:CSC19960212
  • 文件格式:.rar
  • 所需积分:3
 相关标签: 坐标 数据导入 折线图 便捷

实例介绍

【实例简介】导入数据,实现在坐标系上绘画出折线图

【实例截图】

from clipboard

【核心代码】


 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        bool flag = false;
        ToolTip tooltip = new ToolTip();
        int[] bufx = new int[1024];
        int[] bufy = new int[1024];
        string resultFile;//定义文本框的值
        int readlen = 0;//定义输出点个数

        //重载后方法!
        protected override void OnPaint(PaintEventArgs e)
        {
            //标志为flase时,不画线
            if (flag == false) return;
            Graphics g = e.Graphics;
            g.DrawLine(Pens.Black, 10, 10, 100, 100);
        }
        //全局定义
        int width = 800, height = 350; //定义画布大小
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(950, 500); //创建位图(Draw 绘制)
        //创建坐标系
        private void draw(int[] xbuf, int[] ybuf)//创建坐标系方法(xbuf,ybuf绘制点坐标数组)
        {

            //创建Graphics类对象(Graphics 绘图)(Graphics在已知的控件上的方法)
            Graphics g = Graphics.FromImage(image);
            //定义填充图图形
            System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);
            Brush brush1 = new SolidBrush(Color.Blue);
            Brush brush2 = new SolidBrush(Color.SaddleBrown);
            //定义画笔
            System.Drawing.Pen mypen = new Pen(brush, 1);
            System.Drawing.Pen mypen2 = new Pen(Color.Green, 2);
            System.Drawing.Pen mypen3 = new Pen(Color.Green, 1);
            Pen mypen4 = new Pen(Color.Green, 2);
            //定义字体
            Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);
            Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular);
            Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular);
            //清空图片背景色
            g.Clear(Color.White);
            //创建点
            PointF center_Pt = new PointF(475, 225);//定义原点(中心点)
            float  Xaxis_length = 405.0F;
            float  Yaxis_length = 205.0F;
            PointF Xaxis_Begin = new PointF(center_Pt.X - Xaxis_length, center_Pt.Y);//X轴首端点
            PointF Xaxis_EndPt = new PointF(center_Pt.X Xaxis_length, center_Pt.Y);//X轴末端点
            PointF Yaxis_Begin = new PointF(center_Pt.X, center_Pt.Y Yaxis_length);//Y轴首端点
            PointF Yaxis_EndPt = new PointF(center_Pt.X, center_Pt.Y - Yaxis_length);//Y轴末端点
            //①绘制由坐标对、宽度和高度指定的矩形(  x,  y, width, height)(绘制边框线)
            g.DrawRectangle(new Pen(Color.Black), Xaxis_Begin.X, Yaxis_EndPt.Y, 810, 410);
            //② 画X轴    画Y轴    (复杂方法)         
            // g.DrawLine(Pens.Black, Xaxis_Begin.X, Xaxis_Begin.Y, Xaxis_EndPt.X, Xaxis_EndPt.Y);//X轴首 末=左右
            // g.DrawLine(Pens.Black, Yaxis_Begin.X, Yaxis_Begin.Y, Yaxis_EndPt.X, Yaxis_EndPt.Y);//Y轴首 末=上下

            //画Y轴三角形箭头和单位
            PointF[] yPt = new PointF[3] { new PointF(Xaxis_Begin.X, Yaxis_EndPt.Y - 20), new PointF(Xaxis_Begin.X - 8, Yaxis_EndPt.Y), new PointF(Xaxis_Begin.X 8, Yaxis_EndPt.Y) };//定位一个三角形有序对数组(位置)
            g.DrawPolygon(Pens.Black, yPt);//画三角形箭头
            g.FillPolygon(new SolidBrush(Color.Black), yPt);//填充成实心
            g.DrawString("Elec(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_Begin.X - 70, Yaxis_EndPt.Y));//单位
            //画X轴三角形箭头和单位
            PointF[] xPt = new PointF[3] { new PointF(Xaxis_EndPt.X 20, Yaxis_Begin.Y), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y - 8), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y 8) };//定位一个三角形有序对数组(位置)
            g.DrawPolygon(Pens.Black, xPt);//画三角形箭头
            g.FillPolygon(new SolidBrush(Color.Black), xPt);  //填充成实心
            g.DrawString("Angle(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_EndPt.X - 15, Yaxis_Begin.Y 20));//单位
           
          
            //添加背景颜色
            g.FillRectangle(Brushes.Lavender, Xaxis_Begin.X 1, Yaxis_EndPt.Y 1, width 9, height 59);

            //绘制线条
            //绘制纵向线条
            //x和y(430)为首个竖向线条的位置,13为竖向线条总数,60为竖向间隔
            float x = 140;
            for (int i = 0; i < 11; i )
            {
                g.DrawLine(mypen, x, Yaxis_Begin.Y, x, Yaxis_EndPt.Y);
                x = x 67;
            }
            //绘制横向线条
            //y和x(820)为首个横向线条的位置,7为横向线条总数,45为横向间隔
            float y = 75;
            for (int i = 0; i < 7; i )
            {
                g.DrawLine(mypen, Xaxis_Begin.X, y, Xaxis_EndPt.X, y);
                y = y 51;
            }
            //绘制一条虚线(标准线)
            mypen4.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;
            g.DrawLine(mypen4, new Point(70, 35), new Point(882, 35));

            //刻度
            //x轴上对应的标记
            String[] n = { " -180", " -150", " -120", " -90", " -60", " -30", "  0", " 30", " 60", " 90", "120", "150", "180" };
            //设置文字内容及输出位置(DrawString 在指定位置输出文本)
            //x和y(435)为首个刻度的位置,13为刻度总数,60为刻度间隔
            x = 50.0F;
            for (int i = 0; i < 13; i )
            {
                g.DrawString(n[i].ToString(), font, Brushes.Red, x, 435);
                x = x 68.5F;
            }
            //y轴上对应的标记
            String[] m = { "    0", " -10", " -20", " -30", " -40", " -50", " -60", " -70", " -80" };
            //设置文字内容及输出位置(DrawString 在指定位置输出文本)
            //x(70)和y为首个刻度的位置,13为刻度总数,60为刻度间隔
            y =12.5F;
            for (int i = 0; i < 9; i )
            {
                g.DrawString(m[i].ToString(), font, Brushes.Red, 40, y);
                y = y 51.4F;
            }

            g.Dispose();
            this.pictureBox1.Image = image;

        }
        //图片框
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            
        }
        //Form1
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            draw(bufx, bufy);
            
        }
        //选取文件按钮
        private void button1_Click(object sender, EventArgs e)
        {
            //第一种:folderBrowserDialog1为选取文件夹控件
            //if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            //{
            //    textBox1.Text = folderBrowserDialog1.SelectedPath;
            //}

            //第二种:openFileDialog1为选取文件控件
            openFileDialog1.InitialDirectory = "c:\\";//注意这里写路径时要用c:\\而不是c:\
            openFileDialog1.Filter = "文本文件|*.txt";//筛选文件类型
            openFileDialog1.RestoreDirectory = true;  //控制对话框在关闭之前是否恢复当前目录 
            openFileDialog1.FilterIndex = 1;          //在对话框中选择的文件筛选器的索引,如果选第一项就设为1 
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                System.IO.StreamReader(openFileDialog1.FileName);
               //MessageBox.Show(sr.ReadToEnd());  //显示选取的文本文件内容
                //在文本框显示文件路径   
                resultFile = openFileDialog1.FileName;
                textBox1.Text = resultFile;//
                sr.Close();
            }


        }
        //进行绘图按钮
        private void button2_Click(object sender, EventArgs e)
        {
            Graphics gph = Graphics.FromImage(image);
            //定义折线图原点
            gph.TranslateTransform(474, 30);
            Pen pn = new Pen(Color.Red, 1);
            readlen = 0;
            if (resultFile == null)
            {
                //报错弹出框
                MessageBox.Show("请选取要绘图的文件!", "错误",
                          MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            else
            {
                //文件不为空的时候读取文件
                StreamReader read = new StreamReader(File.Open(textBox1.Text, FileMode.Open), System.Text.Encoding.Default);
                List<float> x = new List<float>();
                List<float> y = new List<float>();
                while (true)
                {
                    string strLine = read.ReadLine();
                    if (strLine == null || strLine == "")
                    {
                        break;
                    }
                    else
                    {
                        string[] sl = strLine.Split(new char[] { '\t' });
                        if (sl[0] != "!")
                        {

                            x.Add(2.25F * float.Parse(sl[0]));
                            y.Add(-4.9F * float.Parse(sl[1]));
                        }
                    }
                    if (strLine.Length >= 3)
                    {
                        String[] date = strLine.Split(',');
                        int len = date.Length;
                        //label2.Text =Convert.ToString(date[11]);
                        int j = 0;
                        for (int p = 0; p < len / 2; p )
                        {   //x:70 ,4*  x=70 4*d;
                            //y:310,*6  y=310-6*d

                            bufx[readlen / 2 p] = Convert.ToInt32(date[j]) * 4 40;
                            bufy[readlen / 2 p] = 310 - Convert.ToInt32(date[j 1]) * 6;
                            j = 2;

                        }
                        readlen = len;
                    }

                }
                //关闭数据流
                read.Close();
                int i = 5;
                while (true)
                {
                    if (i >= x.Count - 1)
                    {
                        break;
                    }
                    else
                    {
                        gph.DrawLine(Pens.Red, x[i], y[i], x[i 1], y[i 1]);
                        i ;
                    }
                }
                //输出点数
                gph.Dispose();
                label2.Text = Convert.ToString("输出点个数:" readlen);
                this.pictureBox1.Image = image;
            }
        }
        //清除数据按钮
        private void button3_Click(object sender, EventArgs e)
        {
            draw(bufx, bufy);
            label2.Text = Convert.ToString("输出点个数:");
        }
        //文本框
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }


实例下载地址

C# 直角坐标系(绘图实例)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警