我现在做一个鼠标移动,鼠标点上横坐标线和纵坐标先动态移动
所以想保持背景图像不变,但现在不知如何保存原背景图像?

解决方案 »

  1.   

    不太明白你的意思,是不是用鼠标在Form中拖动一个矩形框,任何把Form中这个矩形的背景保存
      

  2.   

    用ControlPaint.DrawReversibleLine来画线,注意这个是用的屏幕DC来绘的,所以需要的是屏幕坐标
    同样的地方再绘制一次可以把原来的线条擦除
      

  3.   

    用graphics类来做,擦除的话有两种情况:
    1.当背景是单色的时候,你可以在画新线的时候,先将原来的线用背景色重新画一边.
    2.当背景是图像的时候,你就先将背景保存,然后每次画之前,就先用保存的背景来覆盖.
    当然这些事件肯定是加在鼠标的move事件上.
      

  4.   

    给你一点参考:        private Image bmp;//在formload事件中将背景图像赋值给它
            private void Form10_MouseMove(object sender, MouseEventArgs e)
            {//这个例子是在画一个矩形,downpoint是鼠标按下的坐标,bmp是
                Point newrect = new Point(downpoint.X,downpoint.Y);
                int width = e.Width;
                int height = e.Height;
                rect = new Rectangle(newrect,new Size(width,height));
                Pen p = new Pen(Color.Blue, 2);
                Bitmap bb = new Bitmap(bmp);//新建一个图像,与背景相同
                Graphics g = Graphics.FromImage(bb);//在这个新的图像上建立画布
                g.DrawRectangle(p, rect);//将你要画的东西画在这个画布上
                this.CreateGraphics().DrawImage(bb, 0, 0);//将这个画完的图像画到你要显示的画板上.
                g.Dispose();
                p.Dispose();
                }
            }
      

  5.   

    楼上楼主要的线条肯定是要在Paint中画
    MouseMove中只是改变线条位置并刷新而已
    画线条最快的是用异或绘制,当然,在PaintBackground中重绘背景是一般做法
      

  6.   

    居然说8楼的不正确?
    那才是正解,最快的,是缓存方式。而他建立的BB,实际上就是一个缓存。单纯的异步没那么好的效果。
    在还没有Dispose时,你完全可以从bb里拿出你需要的东西。
    //新建一个图像,与背景相同
    Bitmap bb = new Bitmap(bmp);
    //在这个新的图像上建立画布
    Graphics g = Graphics.FromImage(bb);
    //将你要画的东西画在这个画布上
    g.DrawRectangle(p, rect);
    //将这个画完的图像画到你要显示的画板上.
    this.CreateGraphics().DrawImage(bb, 0, 0);
    g.Dispose();
    p.Dispose();
      

  7.   

    8楼的大侠,我就是
    private Image bmp;//在formload事件中将背景图像赋值给它
    做不到啊?怎么画我都会,就是如何获取图像怎么办?我是在SplitContainer中画图的,
    如何获得在SplitContainer.Panel1中的已画图像?