C#中双缓存绘图的实现方法

最近正在考虑写个小游戏,来学习GDI+。其中要用到的一个技术就是双缓存技术,双缓冲技术是为了解决界面闪烁而采用的一项技术,就是将要绘制的界面先绘制在内存中一个虚拟的、和正在显示的界面同样大小的一个区域上,界面变化时将这个内存中的图象一次性绘制到屏幕上。通常,双缓存逻辑如下所示:
1.  protected override void OnPaint(PaintEventArgs e )
2.  {
3.  Graphics gxOff; //屏幕外的图像
4.   
5.     if (m_bmpOffscreen == null) //要双缓冲的位图
6.     {
7.        m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height);
8.     }
9.           
10.                   gxOff = Graphics.FromImage(m_bmpOffscreen);
11.                 
12.                   gxOff.Clear(this.BackColor);
13.                   //绘制一些位图
14.                   gxOff.DrawImage(bmpParent, 0, 0, bmpRect, GraphicsUnit.Pixel);
15.                   
16.                   //边界矩形
17.                Rectangle rc = this.ClientRectangle;
18.                   rc.Width--;
19.                   rc.Height--;
20.                            
21.                   //绘制边界
22.                   gxOff.DrawRectangle(new Pen(Color.Black), rc);
23.                   //从内存位图绘制
24.                   e.Graphics.DrawImage(m_bmpOffscreen, 0, 0);
25.                 
26.                   base.OnPaint( e );
27.                }
在上面的代码中,我们通过调用 Graphics 类的静态 FromImage 方法在与我们的控件大小相同的空位图中创建了一个 Graphics 对象。我们在内存中的 Graphics 对象上进行所有的绘图,完成后,将整个准备好的位图覆盖到控件的图形上即可。
posted @ 2006-12-25 22:25  周金桥  阅读(701)  评论(0编辑  收藏  举报