WEB开发网
开发学院软件开发VC 多层图像合成修正版 阅读

多层图像合成修正版

 2007-03-17 21:58:39 来源:WEB开发网   
核心提示: 在Resources中引入我们要合成的两幅Bmp图像(一幅作为背景图、另一幅为前景图),分别命名为IDB_BK、IDB_FORE,多层图像合成修正版(2), 给CCTestSelDrawPicView类建两个CBitmap类型的成员变量,分别命名为m_bmpBk、m_bmpFore,在CC

在Resources中引入我们要合成的两幅Bmp图像(一幅作为背景图、另一幅为前景图),分别命名为IDB_BK、IDB_FORE。

给CCTestSelDrawPicView类建两个CBitmap类型的成员变量,分别命名为m_bmpBk、m_bmpFore。

在CCTestSelDrawPicView类中新建两个CDC类型的成员变量,分别命名为m_dcBk、m_dcFore。

在初始化函数中将两幅Bmp图像装入。在CCTestSelDrawPicView::OnInitialUpdate()函数中加入如下代码:

m_bmpBk.LoadBitmap(IDB_BK); //将背景图载入
m_bmpFore.LoadBitmap(IDB_FORE); //将前景图载入
CClientDC dc(this); //获得当前客户区设备环境
m_dcBk.CreateCompatibleDC(&dc); //创建与当前设备相兼容的设备
m_dcFore.CreateCompatibleDC(&dc);在CPicView类的OnDraw(CDC* pDC)函数中加入如下代码:  CBitmap* poldBk=m_dcBk.SelectObject(&m_bmpBk); //选入背景图
CBitmap* poldFore=m_dcFore.SelectObject(&m_bmpFore);
  CRect rect;
GetClientRect(&rect); //得到客户区矩形
  CDC maskDc; //创建设备环境maskDc
  CBitmap maskBitmap;
  maskDc.CreateCompatibleDC(pDC); //创建与当前设备相兼容的设备
  maskBitmap.CreateBitmap(rect.Width(),rect.Height(),1,1,NULL ); //创建一个单色图
CBitmap* pOldMaskDCBitmap = maskDc.SelectObject( &maskBitmap ); //选入单色图
  CBrush brush(RGB(255,255,255));
  CBrush * oldbrush;
oldbrush=maskDc.SelectObject(&brush);
maskDc.FillRect(&rect,&brush);
  //取得要消除的背景色值
  COLORREF clrTrans= m_dcFore.GetPixel(2, 2);
  // 设置前景图的背景色
  COLORREF clrSaveBk = m_dcFore.SetBkColor(clrTrans);
  //将前景图拷贝到maskDc
maskDc.BitBlt(0,0,rect.Width(),rect.Height(), &m_dcFore, 0,0,SRCCOPY);
 

//将前景图拷贝到maskDc,此时maskDc如下图:

//前景图与mask做 ‘与’运算

  m_dcFore.SetBkColor(RGB(0,0,0));
   m_dcFore.SetTextColor(RGB(255,255,255));
m_dcFore.BitBlt(0,0,rect.Width(), rect.Height(),&maskDc,0,0,SRCAND);

  //背景图与mask做‘与’运算
   m_dcBk.SetBkColor(RGB(255,255,255));
   m_dcBk.SetTextColor(RGB(0,0,0));
m_dcBk.BitBlt(0,0,rect.Width(),rect.Height(),&maskDc,0,0,SRCAND);

  //背景图与前景图做‘或’运算
m_dcBk.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m_dcFore,0,0,SRCPAINT);

  //将合成后的图像显示
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_dcBk,0,0,SRCCOPY);
pDC->SelectObject(oldbrush);
   m_bmpBk.SelectObject(poldBk);
m_bmpFore.SelectObject(poldFore);

全文完

上一页  1 2 

Tags:多层 图像 合成

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接