本身和MFC无关,只是将image2中白色(如255,255,255)得像素用image1中的像素替换。
解决方案 »
- 你们自己写线程池有一个投递人物执行时间太长或者阻塞死掉了 你们怎么处理的?
- VC怎样读取打印机的状态
- socket程序已编好,差个界面
- 我用dlg.DoModal()创建一个对话框来等待我的主程序完成操作,但dlg放在主程序中,就一直要等这个等待对话框关闭才执行下面的操作?
- 这个简单的Atl Com编译的DLL错误怎么解决?
- 高手救命。。。。。。关于this。。。。。
- 关于在一个dll使用另一个 dll中的对话框资源及类的问题(菜鸟免了)
- 怎样在普通的CDialog窗口里加TOOLBAR、加分切窗口等等
- 金山游侠原理
- 汇编高手请进内指点!!!
- 函数指针能去掉static修饰吗?
- 如何区分文件,文件夹
把部分代码贴出来:
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);
标准GDI的TransparentBlt,最后一个参数设置为白色就可以了。不过在头文件里面要 #pragma comment( lib,"msimg32.lib")
创建一个与image1或image2相兼容的内存DC
然后将image1绘制上去
再使用TransparentBlt函数(最后的颜色参数使用RGB(255,255,255))这样就可以去掉image2的白色部分绘制在内存DC中 就形成了image2除去白色后叠加在image1上的效果了.