登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

图像处理 视频分析 机器视觉 模式识别

方向比努力更重要

 
 
 

日志

 
 
关于我

河北软件开发项目,电子警察卡口项目,公安天网项目,媒体流处理,数字图像处理。媒体服务器 RTSP、图像处理、车牌识别……DCT变换,H.264压缩

关于DC绘图用法  

2010-01-26 09:40:27|  分类: DC|Gdi|Gdi+ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一个特例,显示位图  
  //通过资源画图  
  static   void   DrawBitmap(UINT   bitmap,CDC   *pDC,CRect   rect)  
  {  
      CBitmap   bmp;  
      if   (bmp.LoadBitmap(bitmap))  
      {  
      BITMAP   bmpInfo;  
              bmp.GetBitmap(&bmpInfo);  
              CDC   dcMemory;  
              dcMemory.CreateCompatibleDC(pDC);  
              dcMemory.SelectObject(&bmp);  
      pDC->SetStretchBltMode(HALFTONE);  
      pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);  
      }  
  }  
   
  //通过BMP文件画图  
  static   void   drawBitmapFormFile(CString   BitmapFilePath,CDC   *pDC,CRect   rect)  
  {  
  HANDLE   filehandle=::LoadImage(NULL,BitmapFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);  
  if(filehandle!=NULL)  
  {  
  CBitmap   bmp;  
  if(bmp.Attach(filehandle))  
  {  
                            BITMAP   bmpInfo;  
                            bmp.GetBitmap(&bmpInfo);  
                            CDC   dcMemory;  
                            dcMemory.CreateCompatibleDC(pDC);  
                            dcMemory.SelectObject(&bmp);  
                            pDC->SetStretchBltMode(HALFTONE);  
                            pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);  
    bmp.Detach();  
  }  
  }  
  }

——————————————————————

CreateCompatibleDC用法

CreateCompatibleDC

Creates a memory device context that is compatible with the device specified by pDC.

     假如需要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。一个很好的解决方法就是使用内存dc,将这些操作全部先在内存dc上操作,然后依次性在屏幕上进行操作。

  例如:如果你单单使用bitblt在屏幕上拷贝一个图,那可以直接使用屏幕的dc。但是如果你要先设置背景(fillrect)然后再bitblt的话,这就涉及到两个屏幕dc的操作,这样的话屏幕很容易闪烁。

void CBounceWnd::OnTimer(UINT_PTR /* wParam */)

{

    if (m_bmBall.m_hObject == NULL)

        return;     // no bitmap for the ball

    CRect rcClient;

    GetClientRect(rcClient);

    CClientDC dc(this);

    CBitmap* pbmOld = NULL;

    CDC dcMem;

    dcMem.CreateCompatibleDC(&dc);

    pbmOld = dcMem.SelectObject(&m_bmBall);

    dc.BitBlt(m_ptCenter.x - m_sizeTotal.cx / 2,

            m_ptCenter.y - m_sizeTotal.cy / 2,

            m_sizeTotal.cx, m_sizeTotal.cy,

            &dcMem, 0, 0, SRCCOPY);

    m_ptCenter += m_sizeMove;

    if ((m_ptCenter.x + m_sizeRadius.cx >= rcClient.right) ||

        (m_ptCenter.x - m_sizeRadius.cx <= 0))

    {

        m_sizeMove.cx = -m_sizeMove.cx;

    }

    if ((m_ptCenter.y + m_sizeRadius.cy >= rcClient.bottom) ||

        (m_ptCenter.y - m_sizeRadius.cy <= 0))

    {

        m_sizeMove.cy = -m_sizeMove.cy;

    }

    dcMem.SelectObject(pbmOld);

    dcMem.DeleteDC();

}

  评论这张
 
阅读(1508)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018