更新时间:2015-06-24 19:41:42浏览次数:1+次
直接上代码
CPaintDC dc(this); // device context for painting
dc.BitBlt(50, 0, mdc.GetWidth(),mdc.GetHeight(), &mdc, 0, 0, SRCCOPY);
CMemDC dcImage(mdc.GetWidth(),mdc.GetHeight(),&dc);//原图DC
CBitmap bmpMask;
bmpMask.CreateBitmap(mdc.GetWidth(),mdc.GetHeight(), 1, 1, NULL);// 创建单色掩码位图
CDC dcMask;//掩码DC
dcMask.CreateCompatibleDC(&dc);
dcMask.SelectObject(bmpMask);
//将载入位图的内存DC中的位图,拷贝到临时DC中(this指针加载的图片显示在空白位图上,需要在主程序中加载图片)
dcImage.BitBlt( 0, 0, mdc.GetWidth(),mdc.GetHeight(),&mdc, 0, 0, SRCCOPY);
// 设置临时DC的透明色,这是要清除的颜色。
dcImage.SetBkColor(RGB(181,230,29));
//掩码DC的透明区域为白色其它区域为黑色
dcMask.BitBlt(0, 0, mdc.GetWidth(),mdc.GetHeight(), &dcImage, 0, 0, SRCCOPY);
dc.BitBlt(150, 0, mdc.GetWidth(),mdc.GetHeight(), &dcMask, 0, 0, SRCCOPY);
//临时DC透明区域为黑色,其它区域保持不变
dcImage.SetBkColor(RGB(0,0,0));
dcImage.SetTextColor(RGB(255,255,255));
dcImage.BitBlt( 0, 0, mdc.GetWidth(),mdc.GetHeight(), &dcMask, 0, 0, SRCAND);
dc.BitBlt(230, 0, mdc.GetWidth(),mdc.GetHeight(), &dcImage, 0, 0, SRCCOPY);
// 目标DC透明部分保持屏幕不变,其它部分变成黑色
dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.BitBlt(50, 100, mdc.GetWidth(),mdc.GetHeight(), &dcMask, 0, 0, SRCAND);
dc.BitBlt(0,0,mdc.GetWidth(),mdc.GetHeight(), &dcImage, 0, 0, SRCPAINT);
相关资讯