当前位置: 代码迷 >> C# >> 第一次,在pictureBox1_Paint事件中用Graphics绘图后,怎么保存pictureBox1中的图像
  详细解决方案

第一次,在pictureBox1_Paint事件中用Graphics绘图后,怎么保存pictureBox1中的图像

热度:35   发布时间:2016-05-05 03:56:00.0
第一次,在pictureBox1_Paint事件中用Graphics绘图后,如何保存pictureBox1中的图像?
第一次在CSDN发贴,以前只是看贴不回贴
还请大家指点一二


,在pictureBox1_Paint事件中用Graphics绘图后
,如何保存pictureBox1中的图像?


在pictureBox1_Paint事件中绘制完毕后
pictureBox1.Image依然=null

e.Graphics.DrawLine绘制的图像没有反应到image中去么?

pictureBox1_Paint事件过后
我在另一个按钮里调用 ,
pictureBox1.Image.Save("c:\\a.bmp");
则失败,此时image=null



我也试过这样弄,
            Bitmap bmp=new Bitmap(200,500);
            Graphics g = Graphics.FromImage(bmp); ;// e.Graphics;
            //横网格
            Pen backpen = new Pen(Color.FromArgb(cIDE_INFO.colorBack.ToArgb()-0x00404040));   //背景色变暗40
            backpen.DashStyle = DashStyle.Custom; //.DashDotDot;
            backpen.DashPattern = new float[] { 1, 6 };
            for (float i = cIDE_INFO.ideCodeSize.Height / 2; i < pictureBox1.Height; i += cIDE_INFO.ideCodeSize.Height)
            {
                g.DrawLine(backpen, 0, i, pictureBox1.Width, i);
            }
            //竖网格
            for (float i = cIDE_INFO.ideCodeSize.Width / 2; i < cIDE_INFO.ideCodeVnum * cIDE_INFO.ideCodeSize.Width; i += cIDE_INFO.ideCodeSize.Width)
            {
                g.DrawLine(backpen, i, 0, i, pictureBox1.Height);
            }
            //画指令
            //todo:要翻页
            Point tp=new Point();
            foreach (ArrayList tzls in ide_all_zls)
            {
                tp.X = 0;
                foreach (object tzl in tzls)
                {
                    cIDE_INFO.ideDrawMove(tp, g);
                    if (tzl != null)
                    {
                        if (tzl.GetType() == typeof(ide.code_type))
                        {
                            cIDE_INFO.DrawZL((ide.code_type)tzl, g);
                            if (((ide.code_type)tzl).分支 == true)
                            {
                                cIDE_INFO.ideDrawMove(tp, g);
                                cIDE_INFO.DrawV(g);
                            }
                        }
                        else if (tzl.GetType() == typeof(string))
                        {
                            string tstr = (string)tzl;
                            if (tstr.IndexOf("H") >= 0)
                            {
                                cIDE_INFO.DrawH(g);
                            }
                        }
                    }
                    tp.X++;
                }
                tp.Y++;
            }
            //画当前插入点 反色处理
            g.ResetTransform();
  
            pictureBox1.Image = bmp;


这样pictureBox1.Image有东西了,可以保存了了,但似乎很卡,最小化,最大化时,即产生重绘事件时,
我主界面上的工具栏也重绘不了啦,
像如图所示

正常的:

异常的:

------解决思路----------------------
你绘图管绘图,Bitmap bmp也照样绘制,相当于同时绘制两张图,最后pictureBox1.Image别去绑bmp,保存用bmp.save
------解决思路----------------------
引用:
也就是pictureBox中现有显示的图形如何复制到另一个pictrueBox中呢?
因为我所有图形都是动态在paint事件中绘制的,

这取决于你另一个pictrueBox如何画,如果是和第一个同步画,那么处理方法和你这个一样,如果是事后才复制,那么就用那个bmp对象绑Image
------解决思路----------------------
Graphics g2 = Graphics.FromImage(bmp);Graphics又不是规定只能有1个,你两个同时用不就即画了picturebox又有了一个bmp副本了嘛,有了副本什么时候用都行了
------解决思路----------------------
既然绘的图内容要保存,那可以在内容有变化的时候绘到一个Image上,然后在Picturebox上显示就可以了.
pictureBox1_Paint 这个方法楼主不需要用,它只是在窗体显示图像的时候可以做些添油加醋的事情.
  相关解决方案