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

来源:互联网 发布:电脑制图软件有哪些 编辑:程序博客网 时间:2024/05/16 01:02

参考:

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 0