📄 利用gdi+的双缓冲技术来提高绘图效率.htm
字号:
{
brush = new LinearGradientBrush(new PointF(0.0f, 0.0f),
new PointF(700.0f, 300.0f), Color.Red, Color.Blue);
flag = false;
}
else
{
brush = new LinearGradientBrush(new PointF(0.0f, 0.0f),
new PointF(700.0f, 300.0f), Color.Blue, Color.Red);
flag = true;
}
for(int j = 0; j < 60; j ++)
{
for(int i = 0; i < 60; i++)
{
g.FillEllipse(brush, i * 10, j * 10, 10, 10);
}
}
this.CreateGraphics().DrawImage(bmp, 0, 0);
DateTime t2 = DateTime.Now;
TimeSpan sp = t2 - t1;
float per = 1000 / sp.Milliseconds;
this.label1.Text = "速度:" + per.ToString() + "帧/秒";
</PRE></DIV>
<P class=text4>运行后,我点击“开始”按纽,效果如下图所示:</P>
<P align=center><IMG alt="" src="利用GDI+的双缓冲技术来提高绘图效率.files/8m734xs7e5ay.gif"
align=top><BR>应用双缓冲以后的效果图(帧数:9帧/秒)</P>
<P
class=text4> 经过改进后,画面刷新速度大大加快,绝对看不到任何的“扫描线”,帧数也从5帧一下就提高到了9帧,几乎是两倍于前的速度。这究竟是什么原因呢?让我来讲述其中的道理。</P>
<P
class=text4> 因为圆是要一个一个画上去,所以每画一个圆,系统就要做一次图形的绘制操作,图形的重绘是很占用资源的,当需要重绘的图形数量很多的时候,所造成的系统开销就特别大,造成我们看到的那种刷新缓慢的情况。那么如何来解决这个问题呢?</P>
<P
class=text4> 答案就是双缓冲,何谓“双缓冲”?它的基本原理就是:先在内存中开辟一块虚拟画布,然后将所有需要画的图形先画在这块“虚拟画布”上,最后在一次性将整块画布画到真正的窗体上。因为所有的单个图形的绘制都不是真正的调用显示系统来“画”,所以不会占用显示系统的开销,极大的提高的绘图效率。</P>
<P class=text4> <STRONG> 实现双缓冲的具体步骤</STRONG></P>
<P class=text4> 我再来详细解释一下刚才实现双缓冲的具体步骤:</P>
<P class=text4> 1、在内存中建立一块“虚拟画布”:</P>
<P class=text4>Bitmap bmp = new Bitmap(600, 600);</P>
<P class=text4> 2、获取这块内存画布的Graphics引用:</P>
<P class=text4>Graphics g = Graphics.FromImage(bmp);</P>
<P class=text4> 3、在这块内存画布上绘图:</P>
<P class=text4>g.FillEllipse(brush, i * 10, j * 10, 10, 10);</P>
<P class=text4> 4、将内存画布画到窗口中</P>
<P class=text4>this.CreateGraphics().DrawImage(bmp, 0, 0);</P>
<P class=text4> <STRONG>总结</STRONG></P>
<P
class=text4> 怎么样?是不是很简单?但是正是这个简单的操作大大提高了绘图效率,所以如果你需要进行GDI+图形编程,双缓冲技术一定要掌握,特别是在进行大量图形绘制刷新的情况下要尽量采用。</P></DIV>
<CENTER><A class=zhy0815button_content title=编辑推荐你阅读
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#1" target=_self>推荐阅读</A>
<A class=zhy0815button_content title=本栏目的最新更新
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#2" target=_self>最新更新</A>
<A class=zhy0815button_content title=阅读此文章的读者还看了以下文章
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#3" target=_self>继续阅读</A>
<A class=zhy0815button_content title=相关主题的关键字
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#4" target=_self>相关主题</A>
<A class=zhy0815button_content title=本文编辑方舟的其他文章
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#5" target=_self>编辑新作</A>
<A class=zhy0815button_content title=本栏目最近最受欢迎的文章
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#6" target=_self>阅读排行</A>
<A class=zhy0815button_content id=comment_url_tag title=读者、编辑互动讨论区
href="http://comments.yesky.com/t/GDI+/6,324/2112113.shtml">讨论本文</A><A
class=zhy0815button_content id=comment_url_art title=读者、编辑互动讨论区
href="http://comments.yesky.com/a/6,324/2112113.shtml">讨论本文</A> <A
class=zhy0815button_content title=本文相关产品和厂商
href="http://tech.bc0436.com/dev/msdn/113/2112113.shtml#8" target=_self>相关产品</A>
</CENTER><!-- Error -->
<DIV class=clear1></DIV></DIV><!--结束-->
<DIV class=clear1></DIV>
<DIV class=space2><SPAN id=ad7></SPAN></DIV><!--文章评论区-->
<SCRIPT language=JavaScript>
<!--
var aid = 2112113;
var channelid = 324;
var tagname = "GDI+";
//-->
</SCRIPT>
<SCRIPT language=JavaScript>
<!--
if(typeof(tagname) == "string" && tagname.length > 0) {
comment_url_art[0].style.display = "none";
comment_url_art[1].style.display = "none";
comment_url_tag[0].style.display = "";
comment_url_tag[1].style.display = "";
} else {
comment_url_art[0].style.display = "";
comment_url_art[1].style.display = "";
comment_url_tag[0].style.display = "none";
comment_url_tag[1].style.display = "none";
}
//-->
</SCRIPT>
<!--结束-->
<DIV class=clear1></DIV>
<DIV class=newxiangguan>
<DIV class=newxiangguanmenu><IMG height=11
src="利用GDI+的双缓冲技术来提高绘图效率.files/inverse1-dht.gif" width=22><A
name=1>推荐阅读:相关文章</A> </DIV>
<DIV class=newxiangguancontent></DIV></DIV>
<DIV class=clear1></DIV><!--相关文章-->
<DIV class=newxiangguan>
<DIV class=newxiangguanmenu><IMG height=11
src="利用GDI+的双缓冲技术来提高绘图效率.files/inverse1-dht.gif" width=22>最新热图 </DIV>
<DIV class=newxiangguancontent>
<DIV class=contentpicleft>
<SCRIPT language=JavaScript src="利用GDI+的双缓冲技术来提高绘图效率.files/wenpic1.js"></SCRIPT>
</DIV>
<DIV class=contentpicright>
<SCRIPT language=JavaScript src="利用GDI+的双缓冲技术来提高绘图效率.files/wpic.js"></SCRIPT>
</DIV></DIV></DIV>
<DIV class=clear1></DIV>
<DIV class=newxiangguan>
<DIV class=newxiangguanmenu><IMG height=11
src="利用GDI+的双缓冲技术来提高绘图效率.files/inverse1-dht.gif" width=22>天极无线 </DIV>
<DIV class=newxiangguancontent><SPAN id=ad6></SPAN></DIV></DIV><!--结束-->
<DIV class=clear1></DIV></DIV>
<DIV class=newright>
<DIV class=newrightad style="HEIGHT: 800px"><SPAN id=ad2></SPAN>
<DIV class=newrightbox>相关厂商 </DIV>
<DIV class=space3><SPAN id=catalogspan></SPAN></DIV><!--writen by michael.joe 2005.06.03 start-->
<SCRIPT language=JavaScript>
<!--
var catalogid=0;
var pbcid=-1 ;
var pscid=-1;
var brandid=-1;
var pid=0;
var regionid=-1;
if (brandid>0)
{
catalogid = brandid;
}else if (pscid > 0)
{
catalogid = pscid;
}else if (pbcid > 0)
{
catalogid = pbcid;
}
//else if(pid > 0){catalogid=pid;}
//else if(regionid>0){catalogid=regionid;}
if(typeof(catalogid) != "undefined" &&catalogid!=0) {
document.write("<script language=\"JavaScript\" charset=\"gb2312\" defer src=\"http://www.cseek.com/product2article/"+catalogid+"c.js\"><\/script>");
}
//-->
</SCRIPT>
<!--writen by michael.joe 2005.06.03 end--><!--结束-->
<DIV class=newrightbox><A name=8>相关产品</A> </DIV>
<DIV class=space3><SPAN id=productspan></SPAN></DIV><!--writen by michael.joe 2005.06.03 start-->
<SCRIPT language=JavaScript>
<!--
var catalogid=0;
var pbcid=-1 ;
var pscid=-1;
var brandid=-1;
var pid=0;
var regionid=-1;
if (brandid>0)
{
catalogid = brandid;
}else if (pscid > 0)
{
catalogid = pscid;
}else if (pbcid > 0)
{
catalogid = pbcid;
}
//else if(pid > 0){catalogid=pid;}
//else if(regionid>0){catalogid=regionid;}
if(typeof(catalogid) != "undefined" &&catalogid!=0) {
document.write("<script language=\"JavaScript\" charset=\"gb2312\" defer src=\"http://www.cseek.com/product2article/"+catalogid+"p.js\"><\/script>");
}
//-->
</SCRIPT>
<!--writen by michael.joe 2005.06.03 end--><!--结束-->
<DIV class=newrightbox><A name=4>相关主题的关键字</A> </DIV>
<DIV class=space3>
<LI><A href="http://tech.bc0436.com/tags/1447567/his.shtml">.NET</A>(55)
<LI><A href="http://tech.bc0436.com/tags/2182815/his.shtml">GDI+</A>(2)
</LI></DIV>
<DIV class=clear1></DIV>
<DIV class=newrightbox><A name=2>最新更新</A> </DIV>
<DIV class=space3>
<LI><A
href="http://tech.bc0436.com/dev/msdn/8/2346008.shtml">如何开发一个多种语言版本的C#程序</A>
<LI><A href="http://tech.bc0436.com/dev/msdn/304/2345804.shtml">C#利用Web
Service实现短信发送</A>
<LI><A href="http://tech.bc0436.com/dev/msdn/195/2345695.shtml">C# 3.0
新特性:扩展方法初探</A>
<LI><A
href="http://tech.bc0436.com/dev/msdn/425/2344925.shtml">.NET正则表达式使用高级技巧之反向引用</A>
<LI><A
href="http://tech.bc0436.com/dev/msdn/63/2343563.shtml">.NET下正则表达式应用的四个示例</A>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -