学习了一个消除位图底色的方法:可以参考下下
CPaintDC dc(this); // 用于绘制的设备上下文
//存储目标位图
CBitmap bmp; BITMAP bm;
bmp.LoadBitmap(IDB_BITMAP4);
bmp.GetBitmap(&bm);
CDC mdcimage;
mdcimage.CreateCompatibleDC(NULL);
mdcimage.SelectObject(bmp);
//创建存储单色位图的DC
CBitmap tem;
tem.CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL);
CDC dcMack;
dcMack.CreateCompatibleDC(&dc);
dcMack.SelectObject(tem);
//工具人DC
CBitmap imabmp;
imabmp.CreateCompatibleBitmap(&dc, bm.bmWidth, bm.bmHeight);
CDC image;
image.CreateCompatibleDC(&dc);
image.SelectObject(imabmp);
image.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &mdcimage, 0, 0, SRCCOPY);
image.SetBkColor(0xff00ff);//填目标位图的底色
//底色为白色的 黑蝴蝶
dcMack.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &image, 0, 0, SRCCOPY);
//底色为黑色的 白蝴蝶
image.SetBkColor(0x0);
image.SetTextColor(0xffffff); //设置黑底白字
image.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcMack, 0, 0, SRCAND);//位图and
//设置白底黑字
dc.SetBkColor(0xffffff);
dc.SetTextColor(0x0);
//dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &image, 0, 0, SRCCOPY);//位图拷贝
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcMack, 0, 0, SRCAND);//通过and输出底色和黑蝴蝶 255 and 什么就是什么
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &image, 0, 0, SRCPAINT);//位图OR 0 OR什么就是什么