<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春天花會(huì)開(kāi)

    ***********

    統(tǒng)計(jì)

    留言簿(4)

    閱讀排行榜

    評(píng)論排行榜

    Windows GDI、GDI+ 繪圖 防閃爍

    “閃爍”的原因是擦除背景(用背景色重新填充)與繪制前景圖像之間有時(shí)間差,而且背景和前景顏色有差異,導(dǎo)致眼睛看上去好像在閃爍。
    “閃爍”并不主要是因?yàn)镚DI或GDI+效率低造成的。

    解決這個(gè)問(wèn)題需從兩個(gè)方面入手:1.縮短(或消除)前后景繪圖時(shí)間差,2.減少繪制次數(shù)
    1.縮短(或消除)前后景繪圖時(shí)間差
    OnEraseBkgnd(CDC* pDC)
    {
        return TRUE;
    }

    實(shí)際上背景填充是必須,否則前景圖像與殘留的背景混在一起非常雜亂,
    這里取消的步驟,其實(shí)移到繪圖過(guò)程了(見(jiàn)2.),合成一張完整圖像。

    2.減少繪制次數(shù)
    采用“雙緩沖”技術(shù),先在內(nèi)存緩沖區(qū)中完成繪圖,再貼到屏幕上
    另外如果緩沖圖像內(nèi)容不是變化的,應(yīng)存為成員對(duì)象之類,不要每次去畫(huà)
    一般在OnDraw(CDC* pDC)中完成
    ///////////////////////////--GDI --////////////////////////////////////
    int nWidth=1000;
    int nHeight=1000;
    CDC MemDC; //首先定義一個(gè)顯示設(shè)備對(duì)象
    CBitmap MemBitmap;//定義一個(gè)位圖對(duì)象
    //隨后建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備
    MemDC.CreateCompatibleDC(pDC); //這時(shí)還不能繪圖,因?yàn)闆](méi)有地方畫(huà) ^_^
    //下面建立一個(gè)與屏幕顯示兼容的位圖,至于位圖的大小嘛,可以用窗口的大小
    //,也可以自己定義(如:有滾動(dòng)條時(shí)就要大于當(dāng)前窗口的大小,在BitBlt時(shí)決定拷貝內(nèi)存的哪部分到屏幕上)

    MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
    //將位圖選入到內(nèi)存顯示設(shè)備中
    //只有選入了位圖的內(nèi)存顯示設(shè)備才有地方繪圖,畫(huà)到指定的位圖上

    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
    //先用背景色將位圖清除干凈,這里用原背景色作為背景
    //你也可以用自己應(yīng)該用的顏色

    MemDC.FillSolidRect(0,0,nWidth,nHeight,pDC->GetBkColor());
    //繪圖
    CBrush brush(RGB(0,255,0));
     for(int i=0;i<50;i++)
     {
      for(int j=0;j<80;j++)
      {
       //MemDC.Rectangle(10*j,10*i,9,9);
       CRect rc(10*j,10*i,10*j+8,10*i+8);
       MemDC.FillRect(&rc,&brush);
      }
     }
    //將內(nèi)存中的圖拷貝到屏幕上進(jìn)行顯示
    pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
    //繪圖完成后的清理
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();


    ///////////////////////////--GDI+ --////////////////////////////////////
     Bitmap* buf=new Bitmap(2000,2000) ;
     Graphics gc(buf);//Graphics.FromImage(buf);
     //反鋸齒
     //gc.SetSmoothingMode(SmoothingModeAntiAlias);
     SolidBrush bgbrush(Color(255,255,255,255));
     gc.FillRectangle(&bgbrush,0,0,2000,2000);//背景填充
     Pen      pen(Color(255, 0, 0, 255));
     SolidBrush sbrush(Color(255,0,255,255));
     for(int i=0;i<60;i++)
     {
      for(int j=0;j<60;j++)
       gc.FillRectangle(&sbrush,10*j,10*i,9,9);
     }
     Graphics G(pDC->GetSafeHdc()); 
     G.DrawImage(buf ,0,0);

     



    posted on 2010-06-19 16:09 春天花會(huì)開(kāi) 閱讀(2637) 評(píng)論(1)  編輯  收藏

    評(píng)論

    # re: Windows GDI、GDI+ 繪圖 防閃爍 2010-11-21 18:18 lcw


    39654106-44068803  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩精品无码人妻免费视频| 精品熟女少妇AV免费观看| 国产AV无码专区亚洲AV漫画| 产传媒61国产免费| 在线日韩av永久免费观看| 亚洲中文字幕久久精品无码VA| 啦啦啦中文在线观看电视剧免费版 | 久久久久久久久亚洲| 久久久精品免费视频| 亚洲大尺度无码无码专区| 日本免费大黄在线观看| 亚洲剧情在线观看| 女人让男人免费桶爽30分钟| 亚洲国产小视频精品久久久三级 | 1000部禁片黄的免费看| 亚洲理论在线观看| 午夜视频免费观看| 免费无码午夜福利片69| 18禁网站免费无遮挡无码中文| 亚洲欧洲精品久久| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 最近中文字幕免费2019| 亚洲日韩精品国产3区| 亚洲精品国自产拍在线观看| 中文无码日韩欧免费视频| 亚洲大片在线观看| 成年女人18级毛片毛片免费观看| 国产精品亚洲精品日韩动图| 中文亚洲AV片不卡在线观看| 97公开免费视频| 亚洲高清一区二区三区电影| 激情97综合亚洲色婷婷五| 久久午夜夜伦鲁鲁片免费无码影视| 学生妹亚洲一区二区| 久久亚洲2019中文字幕| 男女做羞羞的事视频免费观看无遮挡 | 亚洲伊人久久大香线焦| 亚洲国产精品综合久久网络| 日韩免费无码一区二区三区| 亚洲国产精品精华液| 五月天网站亚洲小说|