VisualC 6.0实现多层图像合成
2008-04-09 04:10:42来源:互联网 阅读 ()

实现环境:Visual C 6.0
实现过程:
首先创建一个单文档或多文档的工程取名为CTestSelDrawPicApp。
在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);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash