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

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

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

    春天花會開

    ***********

    統計

    留言簿(4)

    閱讀排行榜

    評論排行榜

    2010年6月19日 #

    Windows GDI、GDI+ 繪圖 防閃爍

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

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

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

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

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

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

    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);
      }
     }
    //將內存中的圖拷貝到屏幕上進行顯示
    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 @ 2010-06-19 16:09 春天花會開 閱讀(2637) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 国产成人在线观看免费网站| 中文字幕影片免费在线观看| 亚洲A丁香五香天堂网| 亚洲a级片在线观看| 青青草免费在线视频| 色婷五月综激情亚洲综合| 永久免费的网站在线观看| 日韩亚洲不卡在线视频中文字幕在线观看| 精品无码AV无码免费专区| 亚洲国产精品日韩在线观看| 久久午夜免费视频| 亚洲精品无码你懂的| 国产男女猛烈无遮挡免费视频 | 青青操免费在线视频| 亚洲AV无码一区二区三区系列 | 一级全免费视频播放| 在线亚洲精品自拍| 日韩视频在线观看免费| 亚洲白色白色在线播放| 午夜a级成人免费毛片| 污视频网站在线免费看| 亚洲精品色午夜无码专区日韩| 热re99久久6国产精品免费| 亚洲国产综合精品中文第一| 国产大片91精品免费看3| 少妇性饥渴无码A区免费| 亚洲噜噜噜噜噜影院在线播放| 青春禁区视频在线观看直播免费| 阿v视频免费在线观看| 久久久久久a亚洲欧洲aⅴ| 黄页网站免费观看| 特级av毛片免费观看| 亚洲AV日韩AV天堂一区二区三区| 免费不卡视频一卡二卡| 一道本在线免费视频| 精品日韩亚洲AV无码一区二区三区 | 亚洲欧洲自拍拍偷综合| 国产又黄又爽又刺激的免费网址| 中文字幕视频免费在线观看| 亚洲国产综合在线| 亚洲精品国产精品乱码不99|