位图的巧妙运算得到透明图片的效果

CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);//载入底层位图
BITMAP bmp;
bitmap.GetBitmap(&bmp);
int nWidth = bmp.bmWidth;
int nHeight = bmp.bmHeight;




CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&bitmap);
pDC->BitBlt(0, 0, nWidth, nHeight, &dcMem, 0, 0, SRCCOPY);//将底层位图打印


bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_BITMAP2);//载入做掩膜运算的图片
bitmap.GetBitmap(&bmp);
nWidth = bmp.bmWidth;
nHeight = bmp.bmHeight;
dcMem.SelectObject(&bitmap);




CDC dcMask;
dcMask.CreateCompatibleDC(pDC);
CBitmap bitmapMask;
bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL);//创建单色的掩码位图
dcMask.SelectObject(bitmapMask);




dcMem.SetBkColor(RGB(0, 0, 0));//此颜色为做掩膜运算中需要显示部分的颜色,将其设置为透明色
dcMask.BitBlt(0, 0, nWidth, nHeight, &dcMem, 0, 0, SRCCOPY);//则dcMask中对应透明色的部分为白色,其他为黑色




pDC->BitBlt(0, 0, nWidth, nHeight, &dcMem, 0, 0, SRCINVERT);//首先与底层图片异或一次
pDC->BitBlt(0, 0, nWidth, nHeight, &dcMask, 0, 0, SRCAND);//与掩码位图与一次将留下对应透明色的部分
pDC->BitBlt(0, 0, nWidth, nHeight, &dcMem, 0, 0, SRCINVERT);//再异或一次将对应透明色的部分还原为底层图片,而其他部分变为做掩膜运算的图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值