C#WinForm利用GDI+的雙緩沖技術(shù)來(lái)提高繪圖效率_第1頁(yè)
C#WinForm利用GDI+的雙緩沖技術(shù)來(lái)提高繪圖效率_第2頁(yè)
C#WinForm利用GDI+的雙緩沖技術(shù)來(lái)提高繪圖效率_第3頁(yè)
C#WinForm利用GDI+的雙緩沖技術(shù)來(lái)提高繪圖效率_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C#WinForm利用GDI+的雙緩沖技術(shù)來(lái)提高繪圖效率前言進(jìn)入.NET時(shí)代,Windows的繪圖技術(shù)也從GDI升級(jí)到了GDI+,從名字就能知道GDI+是對(duì)以前傳統(tǒng)GDI繪圖技術(shù)的一次升級(jí),不過(guò)在微軟幾乎把所有的新技術(shù)都冠之.NET的情況下,GDI+竟然不叫做GDI.NET,還真讓我感到有點(diǎn)意外了。:)GDI+在一種與設(shè)備無(wú)關(guān)的環(huán)境下提供了一套統(tǒng)一的繪圖編程模型,極大的提高了Windows繪圖編程的方便性,我們?cè)僖膊挥脛?chuàng)建什么各種各樣復(fù)雜的設(shè)備環(huán)境了,說(shuō)實(shí)話,我現(xiàn)在想起來(lái)都頭疼。題歸正傳,關(guān)于如何進(jìn)行GDI+的基本編程,我不能過(guò)多的加以描述,如果有對(duì)此概念還不太清楚的朋友,建議先去了解一下相關(guān)

2、的資料,我們?cè)谶@里主要討論的是一種提高繪圖效率(主要是動(dòng)畫(huà)效率)的雙緩沖技術(shù)在GDI+中的應(yīng)用和實(shí)現(xiàn)。實(shí)現(xiàn)目的為了能清楚的對(duì)比應(yīng)用雙緩沖技術(shù)前后的效果,我編寫(xiě)了一段程序來(lái)進(jìn)行測(cè)試。首先,我創(chuàng)建了一個(gè)普通的WindowsApplication,在主Form中,我放置了一個(gè)定時(shí)器:timer1,然后將它的Interval屬性設(shè)置為10,然后在Form上放置兩個(gè)按紐,分別用來(lái)控制定時(shí)器的開(kāi)啟和關(guān)閉,最后,我還放置了一個(gè)label控件,用來(lái)顯示繪圖的幀數(shù)。測(cè)試程序在timer1的timer1_Tick事件中,我寫(xiě)下了如下的代碼(其中flag是一個(gè)bool型標(biāo)志變量):DateTimet1=DateTi

3、me.Now;Graphicsg=this.CreateGraphics();if(flag)brush=newLinearGradientBrush(newPointF(0.0f,0.0f),newPointF(700.0f,300.0f),Color.Red,Color.Blue);flag=false;elsebrush=newLinearGradientBrush(newPointF(0.0f,0.0f),newPointF(700.0f,300.0f),Color.Blue,Color.Red);flag=true;for(intj=0;j<60;j+)for(inti=0;i

4、<60;i+)g.FillEllipse(brush,i*10,j*10,10,10);DateTimet2=DateTime.Now;TimeSpansp=t2-t1;floatper=1000/sp.Milliseconds;this.label1.Text="速度:"+per.ToString()+"幀/秒"運(yùn)行后,我點(diǎn)擊開(kāi)始”按紐,效果如下圖所示:BMMHM*4*4*Oi!應(yīng)用雙緩沖以前的效果圖(幀數(shù):5幀/秒)正如大家所看到的,我在程序中使用循環(huán)畫(huà)了幾百個(gè)圓形,然后在每次的定時(shí)器脈沖事件中使用不同方向的線性漸變來(lái)對(duì)它們進(jìn)行填充,形成了一個(gè)

5、動(dòng)畫(huà)效果。不過(guò)不幸的是,程序運(yùn)行起來(lái)閃爍很?chē)?yán)重,幾乎每次刷新的時(shí)候都可以看到一條很明顯的掃描線從上慢慢的刷到下來(lái)完成整幅圖形的刷新動(dòng)作。如果你不是要模擬老式雷達(dá)的區(qū)域掃描的話,這種速度不會(huì)滿足你的要求。i*-*44+*+*+ir*+*十+-t*T*+-#4+*+*-*+*iw-rt-v4-4-4:改進(jìn)代碼下面是我改進(jìn)以后的代碼:DateTimet1=DateTime.Now;Bitmapbmp=newBitmap(600,600);Graphicsg=Graphics.Fromlmage(bmp);if(flag)brush=newLinearGradientBrush(newPointF(0

6、.0f,0.0f),newPointF(700.0f,300.0f),Color.Red,Color.Blue);flag=false;elsebrush=newLinearGradientBrush(newPointF(0.0f,0.0f),newPointF(700.0f,300.0f),Color.Blue,Color.Red);flag=true;for(intj=0;j<60;j+)for(inti=0;i<60;i+)g.FillEllipse(brush,i*10,j*10,10,10);this.CreateGraphics().Drawlmage(bmp,0,0)

7、;DateTimet2=DateTime.Now;TimeSpansp=t2-t1;floatper=1000/sp.Milliseconds;this.label1.Text="速度:"+per.ToString()+"幀/秒"運(yùn)行后,我點(diǎn)擊開(kāi)始”按紐,效果如下圖所示:*4«>4+4+«+<4片.if*q+*爭(zhēng)傳傳*傘參m*豊十傘*+*+*+#*««-»+*»*WT*dI*#:*#4ttI'K“-anmSH*停止應(yīng)用雙緩沖以后的效果圖(幀數(shù):9幀/秒)經(jīng)過(guò)改進(jìn)后,畫(huà)面刷新速

8、度大大加快,絕對(duì)看不到任何的掃描線”幀數(shù)也從5幀一下就提高到了9幀,幾乎是兩倍于前的速度。這究竟是什么原因呢?讓我來(lái)講述其中的道理。因?yàn)閳A是要一個(gè)一個(gè)畫(huà)上去,所以每畫(huà)一個(gè)圓,系統(tǒng)就要做一次圖形的繪制操作,圖形的重繪是很占用資源的,當(dāng)需要重繪的圖形數(shù)量很多的時(shí)候,所造成的系統(tǒng)開(kāi)銷(xiāo)就特別大,造成我們看到的那種刷新緩慢的情況。那么如何來(lái)解決這個(gè)問(wèn)題呢?答案就是雙緩沖,何謂“雙緩沖”?它的基本原理就是:先在內(nèi)存中開(kāi)辟一塊虛擬畫(huà)布,然后將所有需要畫(huà)的圖形先畫(huà)在這塊“虛擬畫(huà)布”上,最后在一次性將整塊畫(huà)布畫(huà)到真正的窗體上。因?yàn)樗械膯蝹€(gè)圖形的繪制都不是真正的調(diào)用顯示系統(tǒng)來(lái)“畫(huà)”,所以不會(huì)占用顯示系統(tǒng)的開(kāi)銷(xiāo),極大的提高的繪圖效率。實(shí)現(xiàn)雙緩沖的具體步驟我再來(lái)詳細(xì)解釋一下剛才實(shí)現(xiàn)雙緩沖的具體步驟:1、在內(nèi)存中建立一塊“虛擬畫(huà)布”:Bitmapbmp=newBitmap(600,600);2、獲取這塊內(nèi)存畫(huà)布的Graphics引用:Graph

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論