雙緩衝即在記憶體中創建一個與螢幕繪圖區域一致的對象,先將圖形繪製到記憶體中的這個對象上,再一次性將這個對象上的圖形拷貝到螢幕上,這樣能大大加快繪圖的速度。雙緩衝實現過程如下:
1、在記憶體中創建與畫布一致的緩衝區
2、在緩衝區畫圖
3、將緩衝區點陣圖拷貝到當前畫布上
4、釋放記憶體緩衝區
在圖形圖象處理編程過程中,雙緩衝是一種基本的技術。我們知道,如果窗體在回響WM_PAINT訊息的時候要進行複雜的圖形處理,那么窗體在重繪時由於過頻的刷新而引起閃爍現象。解決這一問題的有效方法就是雙緩衝技術。因為窗體在刷新時,總要有一個擦除原來圖象的過程OnEraseBkgnd,它利用背景色填充窗體繪圖區,然後在調用新的繪圖代碼進行重繪,這樣一擦一寫造成了圖象顏色的反差。當WM_PAINT的回響很頻繁的時候,這種反差也就越發明顯。於是我們就看到了閃爍現象。
我們會很自然的想到,避免背景色的填充是最直接的辦法。但是那樣的話,窗體上會變的一團糟。因為每次繪製圖象的時候都沒有將原來的圖象清除,造 成了圖象的殘留,於是窗體重繪時,畫面往往會變的亂七八糟。所以單純的禁止背景重繪是不夠的。我們還要進行重新繪圖,但要求速度很快,於是我們想到了使用 BitBlt函式。它可以支持圖形塊的複製,速度很快。我們可以先在記憶體中作圖,然後用此函式將做好的圖複製到前台,同時禁止背景刷新,這樣就消除了閃 爍。以上也就是雙緩衝繪圖的基本的思路。
首先給出實現的程式,然後再解釋,同樣是在OnDraw(CDC *pDC)中:
CDC MemDC; //首先定義一個顯示設備對象
CBitmap MemBitmap;//定義一個點陣圖對象 //隨後建立與螢幕顯示兼容的記憶體顯示設備
MemDC.CreateCompatibleDC(NULL); //這時還不能繪圖,因為沒有地方畫 ^_^
//下面建立一個與螢幕顯示兼容的點陣圖,至於點陣圖的大小嘛,可以用視窗的大小,也可以自己定義
(如:有滾動條時就要大於當前視窗的大小,在BitBlt時決定拷貝記憶體的哪部分到螢幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight); //將點陣圖選入到記憶體顯示設備中 //只有選入了點陣圖的記憶體顯示設備才有地方繪圖,畫到指定的點陣圖上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //先用背景色將點陣圖清除乾淨,這裡我用的是白色作為背景 //你也可以用自己應該用的顏色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255)); //繪圖
MemDC.MoveTo(……); MemDC.LineTo(……); //將記憶體中的圖拷貝到螢幕上進行顯示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY); //繪圖完成後的清理 //把前面的pOldBit選回來.在刪除MemBitmap之前要先從設備中移除它
MemDC.SelectObject(pOldBit); MemBitmap.DeleteObject(); MemDC.DeleteDC(); 雙緩衝(two way soft-closing)
相關詞條
-
雙緩衝
簡介我們看電視時,看到的螢幕稱為OSD層,也就是說,只有在OSD層上顯示圖像我們才能看到。現在,我需要創建一個虛擬的、看不見但是可以在上面畫圖(比如說畫...
目錄 實現方法 騎馬抽 J2me C# -
液壓與氣動技術
《液壓與氣動技術》,作者是張宏友,由2009大連理工大學出版社於年出版。描述的是本教材以液壓傳動技術為主線,闡明了液壓與氣動技術的基本原理,著重培養學生...
高校專業設定 圖書信息1 圖書信息2 圖書信息3 圖書信息4 -
3D Studio MAX 2 技術精粹(第三卷:建模與材質)
建模概念1.1建模方法1.1.1多邊形建模1.1.2面片建模1.1.3NURBS建模1.2開始1.2.1為任務選擇適當的建模方法1.2.2開始建模的最佳...
內容介紹 作品目錄 -
C語言開發技術詳解
C語言從產生到現在,已經成為最重要和最流行的程式語言之一。《C語言開發技術詳解》分上下兩篇,分別介紹了C語言的基礎和高級程式設計技巧。該書內容豐富、結構...
宣傳語 前言 目錄 -
glutSwapBuffers
GLUT工具包中用於實現雙緩衝技術的一個重要函式。該函式的功能是交換兩個緩衝區...問題的關鍵在於使繪製的東西同時出現在螢幕上。所謂雙緩衝技術, 是指使用...。 在OpenGL中實現雙緩衝技術的一種簡單方法: 1.在調用...
函式簡介 程式示例 -
顯示卡大詞典
、多媒體等方面的性能;而專業顯示卡則強調的是強大的性能、穩定性、繪圖的精確等方面...)是目前科學和工程繪圖領域無可爭辯的圖形技術標準。OpenGL最初由SGI公司...標上都要優於普通顯示卡,同時在調整驅動程式以及提供繪圖的精確性方面也要強很多...
-
AMD公司
適合客戶需要的創新技術,並充分把握每一個市場商機,與廣大的用戶、業務夥伴...成功的合作關係,以便更加深入地了解他們的需求;AMD與技術領袖開展了密切...一些以克服艱巨困難並依靠技術獲得成功的世界級領先者建立了合作關係...
公司簡介 發展歷程 AMD 年表 產品系列 產品分類 -
SSE 4.2
Nehalem發布,4.1包括47條指令,4.2包括7條指令。技術領先 強大...指令,支持單精度、雙精度浮點運算及浮點產生操作,且IEEE 754指令...8Bit,並可保持在臨時緩衝區內,讓指令最多可帶來8倍的讀取頻寬效能提升,對於...
SEE4.2簡介 SSE 4.2報價 SEE4指令集家族介紹 -
Advanced Micro Devices
開發商、OEM廠商和分銷商宣布支持AMD64位技術。在福布斯全球2000強中...的技術和資源,AMD為它的產品集成了先進的亞微米技術。它的產品通常領先於...先進的技術,AMD開發和採用了數百種旨在自動確定最複雜的製造決策...
發展歷程 財報數據 公司業務 公司規模 公司管理