C 雙緩衝技術收集

2021-05-23 21:35:11 字數 1749 閱讀 5231

cimage實現雙緩衝

cimage _img;

初始化:

_img.load(l"map.png");

顯示:onpaint事件中

crect rect;

this->getclientrect(&rect);

hdc hdc=::getdc(this->m_hwnd);

_img.draw(hdc,rect);

幾行**就解決了。

二雙緩衝顯示:【因為是用了兩個cimage例項,要不叫偽雙緩衝吧,但實現方式確實是雙緩衝,可以完成拼圖顯示等功能,當然防重新整理閃爍是肯定有效的】

cimage img0,img1;

img0.load("*.png");

img1.create(w,h,img0.getbpp());

hdc tmpdc=img1.getdc();

先將img0的記憶體中的圖畫到img1的dc上,再用img1.draw到顯示裝置中。

img0.stretchblt(tmpdc,0,0,desw,desh,scr.x,scr.y,desw,desh);//將源圖中rect(scr.x,scr.y,desw,desh) 區域的圖複製到目標區域。

img1.draw(pdc->m_hdc,r);//r是顯示區域,pdc是顯示裝置。

1.建構函式

cimage img;

hbitmap bitmap;

img.load(_t(".//res//teaplanter.jpg"));//背景位圖

m_nbitmapsize=csize(img.getwidth(),img.getheight());

bitmap= img.detach();

teabitmap.attach(bitmap);   

memdc.createcompatibledc(null);

bitmapdc.createcompatibledc(null);

poldbitmap=bitmapdc.selectobject(&teabitmap);//載入背景位圖

2.ondraw函式

crect rect;

cbitmap bitmap;

getclientrect(&rect);

bitmap.createcompatiblebitmap(pdc,m_nbitmapsize.cx,m_nbitmapsize.cy);//繪製彩色點陣圖用pdc控制代碼

//記憶體繪圖

memdc.selectobject(&bitmap);

memdc.bitblt(rect.left,rect.top,rect.width(),rect.height(),&bitmapdc,rect.left,rect.top,srccopy);//先在記憶體繪製背景位圖

drawteadata(&memdc);//記憶體位圖繪製

//複製到視窗

pdc->bitblt(rect.left,rect.top,rect.width(),rect.height(),&memdc,rect.left,rect.top,srccopy);

bitmap.deleteobject();

3.onerasebkgnd函式

return true; //遮蔽視視窗背景重新整理,返回true,

4.析構函式

//釋放cdc

bitmapdc.selectobject(poldbitmap);

memdc.deletedc();   

bitmapdc.deletedc();

c 手工雙緩衝技術

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...

雙緩衝技術

理解 通常我們進行繪圖時,都是直接使用cdc cpaintdc等 物件在螢幕上繪製圖形,如我們經常在onpaint函式中使用 cpaintdc dc this dc.rectangle 0,0,100,100 在螢幕上繪製矩形。但如果應用需要頻繁的繪製圖形,比如每秒要在螢幕上繪製1000個矩形。因此...

2013 4 15 雙緩衝技術

主要原理 當乙個動畫爭先顯示時,程式有在改變他,前面還沒有顯示完,程式又請求重新繪製,這樣螢幕就會不停的閃爍。為了避免閃爍,可以用雙緩衝技術,將要哦處理的都在記憶體中處理好之後,再將其顯示到螢幕上。這樣顯示出來的總是完整的影象,不會出現閃爍的現象。核心技術 先通過setbitmap方法將要繪製哦所有...