我用WindowsSDK处理时也有这个问题(可以用双缓存来解决).建议你到专门的图象处理网站上去看看吧.www.image2003.com

解决方案 »

  1.   

    对这个网站www.image2003.com不错
      

  2.   

    this.SetStyle(ControlStyles.DoubleBuffer,true);//设置双缓冲,防止图像抖动
    this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);// 忽略系统消息,防止图像闪烁
    this.SetStyle(ControlStyles.UserMouse,true);//控制鼠标完成事件
      

  3.   

    .net 绘图确实比较慢,只能针对具体动作写一些算法,比如,如果矩形是实心的,在画的过程是不断增大的,可以每次不要刷新整个画面,只绘制增加部分;另外,this.invalidate()也可以只作用于画面的部分
      

  4.   

    Point ptStart;
    Image bbb ;  //放在内存里
    Graphics gg;
    Graphics ggg;
    bool down = false;
    private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    down = true;
    ptStart = new Point(e.X,e.Y);
    ggg = Graphics.FromHwnd(this.panel1.Handle);
    }private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(down == true)
    {
    bbb = new Bitmap(this.panel1.Width,this.panel1.Height);
    gg = Graphics.FromImage(bbb);
    panel1.Refresh();
    gg.DrawRectangle(Pens.Yellow,ptStart.X,ptStart.Y,e.X-  ptStart.X,e.Y-ptStart.Y);
    ggg.DrawImage(bbb,0,0);

    }

    }private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    down =false;
    gg.Dispose();
    ggg.Dispose();
    }private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    if(bbb!=null)
    e.Graphics.DrawImage(bbb,0,0);
    }楼主是怎么画的?我是先画在一个IMAGE里,然后再画到PANEL上的。
    我没用双缓冲,实验里我在panel1上放了30多个button,label,textbox,datagrid,之类的control,每什么闪烁,自我感觉良好。呵呵。
      

  5.   

    双缓冲里重要的一点是背景不被清空,所以要重载一个方法,将其内容置为空
    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
    }把这个加上试一下
      

  6.   

    to:The123(在我地盤這 伱就得聽我的)我是直接在Paint方法中绘制的,我不可能绘制在图片中,因为我的鼠标画出来的是矩形是空心的