手动实现双缓冲

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1//获得对 BufferedGraphicsContext 类的实例的引用
 2BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
 3//通过调用 Allocate 方法来创建 BufferedGraphics 类的一个实例
 4BufferedGraphics myBuffer = currentContext.Allocate(this.CreateGraphics(), this.DisplayRectangle);
 5Graphics g = myBuffer.Graphics;
 6//通过设置 Graphics 属性将图形绘制到图形缓冲区
 7g.Clear(Button.DefaultBackColor);
 8Draw(g);
 9//当完成所有图形缓冲区中的绘制操作时,可调用 Render 方法将缓冲区的内容呈现到与该缓冲区关联的绘图图面或者指定的
10//绘图图面
11myBuffer.Render();
12//完成呈现图形之后,对 BufferedGraphics 实例调用释放系统资源的 Dispose 方法
13myBuffer.Dispose(); 

 

使用这种方式画图,比那种使用缓冲的Graphics g=Graphics.FromImage(),然后用g画图的方法更快。

下面这幅图使用缓冲,每秒画12帧左右。主要代码为:

ContractedBlock.gif ExpandedBlockStart.gif Code
1DateTime t1 = DateTime.Now;
2            Bitmap bmp = new Bitmap(600600);
3            Graphics g = Graphics.FromImage(bmp);
4            Draw(g);
5            this.CreateGraphics().DrawImage(bmp, 00);
6            DateTime t2 = DateTime.Now;
7            TimeSpan sp = t2 - t1;
8            float per = 1000 / sp.Milliseconds;
9            lbSpeed.Text = "速度:" + per.ToString() + "帧/秒";

这面这幅图是手动管理双缓冲,每秒画16-21帧,主要代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
 1BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
 2            BufferedGraphics myBuffer = currentContext.Allocate(this.CreateGraphics(), this.DisplayRectangle);
 3            DateTime t1 = DateTime.Now;
 4            Graphics g = myBuffer.Graphics;
 5            g.Clear(Button.DefaultBackColor);
 6            Draw(g);
 7            myBuffer.Render();
 8            DateTime t2 = DateTime.Now;
 9            TimeSpan sp = t2 - t1;
10            float per = 1000 / sp.Milliseconds;
11            lbSpeed.Text = "速度:" + per.ToString() + "帧/秒";
12            myBuffer.Dispose(); 

转载于:https://www.cnblogs.com/xiange/archive/2009/06/08/1498623.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值