我的问题是这样的,我要在一个背景上绘制一些图案,但是如果每次都重绘背景的话会造成闪烁,所以我想是不是背景绘制好之后将它保存为一个GDI对象,待重绘的时候将其选入Graphic中,有点类似于c++的双缓存技术,不知道可否实现。小弟刚学cs,请大家不吝赐教。

解决方案 »

  1.   

    .NET已经从内部支持双缓冲
    如果你是在自定义控件上绘图,可以直接设置
    this.DoubleBuffer = true
      

  2.   

    给你个大概:先创建一个内存位图,大小可以按你实际的需要来定
    Bitmap buffer = new Bitmap(100, 100);然后从这个内存位图中创建一个Graphics,再在这个Graphics中绘制内容。
    Graphics g = Graphics.FromImage(buffer);
    g.DrawRectangle(...);最后在Paint事件中,将内存位图复制到控件的Graphics中。
    private void Form_Paint(object sender, PaintEventArgs e)
    {
      // 这只是个示范,实际需要提供的参数请参考智能感应和MSDN帮助。
      e.Graphics.DrawImage(buffer);
    }
    另外,如果觉得这样复杂,也可以通过设置Form的DoubleBuffer属性来开启双缓冲的功能。