BMP图片反转(黑色变白色,白色变黑色)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 16:46   11   0

参考:

http://www.myexception.cn/vc-mfc/124942.html

HBITMAP hBmp = (HBITMAP)LoadImage(NULL, csBmpFile, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);

hBmp = BmpInversion(hBmp, pClientDC);


HBITMAP CBmpList::BmpInversion(HBITMAP hSrcBmp, CClientDC* pClientDC)
{
CBitmap btSRC;
btSRC.Attach(hSrcBmp);
CDC dcSrc;
CDC dcDest;
//分别创建对预显示位图的DC的兼容DC
dcSrc.CreateCompatibleDC(pClientDC);
dcDest.CreateCompatibleDC(pClientDC);
BITMAP bitmap;
btSRC.GetBitmap(&bitmap);
CBitmap btSingleColor;
//创建单色位图
btSingleColor.CreateBitmap(bitmap.bmWidth, bitmap.bmHeight, 1, 1, NULL);
//载入源位图
dcSrc.SelectObject(&btSRC);
//VC默认的背景色白色
//设置背景色,也就是源位图的透明色
dcSrc.SetBkColor(RGB(0,0,0));//如何才能知道一副图片的前景色和背景色…… by ralf
//载入单色位图
dcDest.SelectObject(&btSingleColor);
//这里DC之间的块数据拷贝就用到了开头提到的知识点,从彩色位图向单色位图转换,
//源位图的背景图拷到掩码DC中后变为白色,其他则为黑色
dcDest.BitBlt(0, 0, bitmap.bmWidth, bitmap.bmHeight, &dcSrc, 0, 0, SRCINVERT);
hSrcBmp = (HBITMAP)btSingleColor.Detach();
dcSrc.DeleteDC();
dcDest.DeleteDC();
btSRC.DeleteObject();
return hSrcBmp;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP