最近正在考虑写个小游戏,来学习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 对象上进行所有的绘图,完成后,将整个准备好的位图覆盖到控件的图形上即可。

相关文章:

  • 2022-12-23
  • 2021-09-08
  • 2021-12-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2021-06-04
相关资源
相似解决方案