青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 42  文章 - 3  trackbacks - 0
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

網(wǎng)頁收藏

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

在圖形圖象處理編程過程中,雙緩沖是一種基本的技術(shù)。我們知道,如果窗體在響應(yīng)WM_PAINT消息的時候要進行復(fù)雜的圖形處理,那么窗體在重繪時由于過頻的刷新而引起閃爍現(xiàn)象。解決這一問題的有效方法就是雙緩沖技術(shù)。
  因為窗體在刷新時,總要有一個擦除原來圖象的過程OnEraseBkgnd,它利用背景色填充窗體繪圖區(qū),然后在調(diào)用新的繪圖代碼進行重繪,這樣一擦一寫造成了圖象顏色的反差。當(dāng)WM_PAINT的響應(yīng)很頻繁的時候,這種反差也就越發(fā)明顯。于是我們就看到了閃爍現(xiàn)象。

我們會很自然的想到,避免背景色的填充是最直接的辦法。但是那樣的話,窗體上會變的一團糟。因為每次繪制圖象的時候都沒有將原來的圖象清除,造成了圖象的殘留,于是窗體重繪時,畫面往往會變的亂七八糟。所以單純的禁止背景重繪是不夠的。我們還要進行重新繪圖,但要求速度很快,于是我們想到了使用BitBlt函數(shù)。它可以支持圖形塊的復(fù)制,速度很快。我們可以先在內(nèi)存中作圖,然后用此函數(shù)將做好的圖復(fù)制到前臺,同時禁止背景刷新,這樣就消除了閃爍。以上也就是雙緩沖繪圖的基本的思路。

 

一、普通方法:

  先按普通做圖的方法進行編程。即在視類的OnDraw函數(shù)中添加繪圖代碼。在此我們繪制若干同心圓,代碼如下:

 CBCDoc* pDoc = GetDocument();

 ASSERT_VALID(pDoc);

 CPoint ptCenter;

 CRect rect,ellipseRect;

 GetClientRect(&rect);

 ptCenter = rect.CenterPoint();

 for(int i=20;i>0;i--)

 {

      ellipseRect.SetRect(ptCenter,ptCenter);

      ellipseRect.InflateRect(i*10,i*10);

      pDC->Ellipse(ellipseRect);

 }

編譯運行程序,嘗試改變窗口大小,可以發(fā)現(xiàn)閃爍現(xiàn)象。

 

二、雙緩沖方法:

  在雙緩沖方法中,首先要做的是屏蔽背景刷新。背景刷新其實是在響應(yīng)WM_ERASEBKGND消息。我們在視類中添加對這個消息的響應(yīng),可以看到缺省的代碼如下:

BOOL CMYView::OnEraseBkgnd(CDC* pDC)

{

     return CView::OnEraseBkgnd(pDC);

}

是調(diào)用父類的OnEraseBkgnd函數(shù),我們屏蔽此調(diào)用,只須直接return TRUE;即可。

 

  下面是內(nèi)存緩沖作圖的步驟。

 CPoint ptCenter;

 CRect rect,ellipseRect;

 GetClientRect(&rect);

 ptCenter = rect.CenterPoint();

 CDC dcMem;            //用于緩沖作圖的內(nèi)存DC

 CBitmap bmp;          //內(nèi)存中承載臨時圖象的位圖

 dcMem.CreateCompatibleDC(pDC);  //依附窗口DC創(chuàng)建兼容內(nèi)存DC

 bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//創(chuàng)建兼容位圖

 dcMem.SelectObject(&bmp);     //將位圖選擇進內(nèi)存DC

//按原來背景填充客戶區(qū),不然會是黑色

 dcMem.FillSolidRect(rect,pDC->GetBkColor());

for(int i=20;i>0;i--)  //在內(nèi)存DC上做同樣的同心圓圖象

 {

      ellipseRect.SetRect(ptCenter,ptCenter);

      ellipseRect.InflateRect(i*10,i*10);

      dcMem.Ellipse(ellipseRect);

 }

 pDC->BitBlt(0,0,rect.Width(),rect.Height(),

&dcMem,0,0,SRCCOPY);//將內(nèi)存DC上的圖象拷貝到前臺

 dcMem.DeleteDC();  //刪除DC

 bm.DeleteObject(); //刪除位圖

由于復(fù)雜的畫圖操作轉(zhuǎn)入后臺,我們看到的是速度很快的復(fù)制操作,自然也就消除了閃爍現(xiàn)象。

 

注意:bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());

這里面CreateCompatibleBitmap第一個參數(shù)不能用dcMem,這樣的話創(chuàng)建的是黑白位圖。如果你要創(chuàng)建彩色位圖,需要用pDC,它用來創(chuàng)建了內(nèi)存DC. 詳細請見下面的MSDN:

When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it. If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap. To create a color bitmap, use the hDC that was used to create the memory device context, as shown in the following code:

    HDC memDC = CreateCompatibleDC ( hDC );

    HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );

    SelectObject ( memDC, memBM );

 

posted on 2009-07-10 23:07 鷹擊長空 閱讀(299) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美色网一区二区| 亚洲精品免费一区二区三区| 在线观看91久久久久久| 国产欧美日韩精品在线| 国产精品久99| 国内精品视频一区| 影音国产精品| 亚洲视频自拍偷拍| 欧美在线视频在线播放完整版免费观看| 性欧美1819sex性高清| 久久免费国产精品1| 亚洲黄色影院| 亚洲免费观看| 亚洲香蕉成视频在线观看| 亚洲女性裸体视频| 久久夜色撩人精品| 欧美日韩亚洲一区三区| 国产欧美一区二区色老头| 亚洲国产91精品在线观看| 亚洲午夜国产一区99re久久| 久久精品欧美日韩| 91久久精品一区二区别| 亚洲一区二区三区高清不卡| 老司机一区二区三区| 国产精品午夜春色av| 亚洲国产精品999| 性做久久久久久久免费看| 欧美搞黄网站| 欧美亚洲三级| 欧美视频在线看| 亚洲高清视频的网址| 亚洲欧美日韩一区在线观看| 亚洲电影免费观看高清| 欧美一级精品大片| 国产精品yjizz| 亚洲精品四区| 欧美高清视频一区二区三区在线观看| 亚洲一区二区日本| 欧美日韩一卡| 99国产精品一区| 免费不卡在线观看av| 午夜精品视频网站| 国产精品啊啊啊| 亚洲一区黄色| 99视频热这里只有精品免费| 欧美a级在线| 亚洲高清在线播放| 免费观看一级特黄欧美大片| 欧美在线免费| 国产情侣久久| 欧美一区二区视频免费观看| 亚洲视频久久| 国产精品久久久久99| 中文欧美日韩| 一区二区三区四区五区精品| 欧美日韩一卡| 午夜在线a亚洲v天堂网2018| 一区二区三区四区蜜桃| 欧美日韩直播| 午夜在线精品偷拍| 亚洲欧美日韩另类精品一区二区三区| 国产精品久久久久久妇女6080 | 欧美 日韩 国产一区二区在线视频 | 亚洲人成在线播放| 欧美日韩精品一区二区在线播放| 欧美三级在线| 中文亚洲视频在线| 日韩视频免费观看高清在线视频| 欧美日韩成人在线观看| 中文欧美日韩| 性欧美办公室18xxxxhd| 国内精品久久久久久久果冻传媒| 久久久久国产精品厨房| 久久亚洲私人国产精品va| 亚洲青涩在线| av成人免费在线观看| 国产精品一区二区久久久久| 久久久精彩视频| 免费在线亚洲| 亚洲欧美日本视频在线观看| 久久激情网站| 日韩视频专区| 性久久久久久久久久久久| 亚洲国产另类久久精品| 亚洲裸体俱乐部裸体舞表演av| 国产精品毛片| 亚洲成色精品| 国产精品久久久久久影院8一贰佰| 久久黄色级2电影| 女主播福利一区| 亚洲一区免费网站| 久久久7777| aaa亚洲精品一二三区| 亚洲欧美日韩人成在线播放| 91久久久久久久久久久久久| 亚洲无线视频| 亚洲美女视频网| 久久精品91久久香蕉加勒比| 亚洲无线视频| 免费看av成人| 久久久九九九九| 欧美日韩中文精品| 欧美国产日韩一区二区在线观看| 国产精品久久久久久久7电影| 欧美国产日韩在线观看| 国产久一道中文一区| 亚洲激情图片小说视频| 国产夜色精品一区二区av| 亚洲精品在线免费| 伊人伊人伊人久久| 午夜精品久久久久久久99水蜜桃 | 欧美中文字幕第一页| 洋洋av久久久久久久一区| 久久精品国产视频| 亚洲欧美在线看| 欧美日韩国产二区| 亚洲国产成人av| 在线免费观看欧美| 欧美在线高清视频| 欧美中在线观看| 欧美少妇一区| 亚洲最新合集| 一本色道久久综合狠狠躁篇的优点| 欧美韩日一区二区| 欧美一区久久| 欧美一区二区三区在线看| 欧美成人久久| 欧美国内亚洲| 亚洲第一黄色| 久久久久九九九| 久久精品国产第一区二区三区最新章节 | 欧美二区不卡| 亚洲第一精品影视| 久久精品天堂| 麻豆精品在线观看| 激情一区二区三区| 久久精品国产第一区二区三区最新章节| 午夜精品久久久久久久男人的天堂| 欧美日韩美女在线观看| 亚洲另类视频| 亚洲欧美视频一区二区三区| 国产精品国产三级国产普通话99 | 一区二区三区免费在线观看| 欧美激情一二三区| 亚洲开发第一视频在线播放| 夜夜精品视频| 欧美日韩一二三区| 亚洲一级电影| 久久亚洲一区| 亚洲精品少妇30p| 欧美日韩一区二区高清| 一区二区三区免费观看| 亚洲欧美日韩成人高清在线一区| 国产精品专区h在线观看| 欧美一区二区在线播放| 乱中年女人伦av一区二区| 亚洲国产精品999| 欧美日韩视频免费播放| 亚洲一区二区三区三| 久久久精品国产99久久精品芒果| 亚洲第一黄色网| 欧美午夜剧场| 久久精品伊人| 日韩天天综合| 久久夜色精品一区| aa级大片欧美| 国内成+人亚洲+欧美+综合在线| 美女脱光内衣内裤视频久久网站| 一本大道久久a久久综合婷婷| 久久精品视频免费播放| 亚洲精品日产精品乱码不卡| 国产精品自拍视频| 蜜臀久久久99精品久久久久久| 99一区二区| 免费在线亚洲欧美| 午夜精品久久| 亚洲第一页中文字幕| 欧美调教vk| 欧美成年视频| 久久国产福利国产秒拍| 99精品免费视频| 欧美成人tv| 欧美一区视频| 一区二区三区精品国产| 激情文学综合丁香| 国产精品久久久久久福利一牛影视| 久热精品视频在线观看一区| 亚洲电影av| 欧美不卡视频一区| 欧美亚洲色图校园春色| 一区二区日本视频| 欧美主播一区二区三区美女 久久精品人| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美日韩在线观看a三区| 在线观看亚洲精品| 国产精品久久毛片a| 欧美成人免费视频| 久久疯狂做爰流白浆xx| 一区二区av| 亚洲国产乱码最新视频|