asked on
HBITMAP bmpReplaceColor(HBITMAP hbm, COLORREF oldColor, COLORREF newColor)
{
CDC hdcOld = CreateCompatibleDC(NULL);
CDC hdcNew = CreateCompatibleDC(NULL);
CBitmapHandle _hbmOld = NULL, _hbmOld2 = NULL, bmOld = hbm;
BOOL bOK=false;
CBitmap bmNew = NULL;
SIZE bmpDim = { 0 };
bmOld.GetSize(bmpDim);
_hbmOld = hdcOld.SelectBitmap(bmOld);
bmNew.CreateCompatibleBitmap(hdcOld, bmpDim.cx, bmpDim.cy);
ATLASSERT(!bmNew.IsNull());//error checking!!!
_hbmOld2 = hdcNew.SelectBitmap(bmNew);
//"transparent" color background
hdcNew.FillSolidRect(0,0,bmpDim.cx, bmpDim.cy, newColor);
bOK = hdcNew.TransparentBlt(0,0,bmpDim.cx,bmpDim.cy, hdcOld, 0,0,bmpDim.cx,bmpDim.cy, oldColor);
hdcOld.SelectBitmap(_hbmOld);
hdcNew.SelectBitmap(_hbmOld2);
if (bOK == FALSE) bmNew.DeleteObject();
return bmNew.Detach();
}