void DrawTransparentBitmap(CDC* pDC, UINT IDImage, CRect & rect, COLORREF rgbMask)
{
CDC ImageDC,MaskDC;
CBitmap Image,*pOldImage;
CBitmap maskBitmap,*pOldMaskDCBitmap ;
Image.LoadBitmap(IDImage);//载入位图资源
ImageDC.CreateCompatibleDC(pDC);//创建兼容的内存DC
pOldImage=ImageDC.SelectObject(&Image);//载入Image对象并保存旧的mage
MaskDC.CreateCompatibleDC(pDC);//创建遮罩兼容DC
maskBitmap.CreateBitmap( rect.Width(), rect.Height(), 1, 1, NULL );//创建空遮罩位图
pOldMaskDCBitmap = MaskDC.SelectObject( &maskBitmap );//载入创建成功的空遮罩位图
ImageDC.SetBkColor(rgbMask);//设置背景色为遮罩色
MaskDC.BitBlt( 0, 0, rect.Width(), rect.Height(), &ImageDC, 0, 0, SRCCOPY );//从ImageDC拷入位图
ImageDC.SetBkColor(RGB(0,0,0));//设置背景色为黑色
ImageDC.SetTextColor(RGB(255,255,255));//设置文本色为白色
ImageDC.BitBlt(0, 0, rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND);//与遮罩位图进行与运算
pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &MaskDC, 0, 0, SRCAND);//与遮罩进行与运算
pDC->BitBlt(rect.left,rect.top,rect.Width(), rect.Height(), &ImageDC, 0, 0,SRCPAINT);//与imagedc进行合并
MaskDC.SelectObject(pOldMaskDCBitmap);
ImageDC.SelectObject(pOldImage);
}
自动生成遮罩bmp图层
最新推荐文章于 2021-12-25 19:52:31 发布