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 对象上进行所有的绘图,完成后,将整个准备好的位图覆盖到控件的图形上即可。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值