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方法將要繪製哦所有...