至今做过两个项目,两个项目都需要用到透明贴图效果,但是使用了两种方法:
方法一:
CBitmap QIZImap;
QIZImap.LoadBitmap (IDB_BLACK);
CDC ImageDC;
ImageDC.CreateCompatibleDC (dcMem);
CBitmap *pOldQIZImap=ImageDC.SelectObject(&QIZImap);
TransparentBlt(dcMem->m_hDC,(xx*48-14+30),(yy*48-14+30),48,48,ImageDC.m_hDC,0,0,48,48,RGB(255,0,0));
ImageDC.SelectObject(pOldQIZImap);
QIZImap.DeleteObject ();
ImageDC.DeleteDC();
这种方法比较复杂,需要理解的东西很多.
用到了TransparentBlt函数,以下是这个函数的介绍(来自百度百科):函数功能:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
该函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境。
函数原型:BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT crTransparent);
参数:
nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。
nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。
nHeightDest:指定目标矩形的高度。
nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。
nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。
nWidthSrc:指定源矩形的宽度。
nHeightSrc:指定源矩形的高度。
crTransparent:源位图中的RGB值当作透明颜色。(用RGB(0,0,0)也就是黑色不行)返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值FALSE
Windows NT:若想获取更多错误信息,请调用GetLastError函数。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在我的代码中用了RGB(255,0,0)的参数,就是将图片中红色部分变成透明
方法二:
<span style="font-size:12px;"> pdc->BitBlt(400,10,41,35,&Bluemask,0,0,MERGEPAINT);
pdc->BitBlt(400,10,41,35,&Blueplane,0,0,SRCAND);</span>
这个方法看过去特别简单,只需要在贴图的时候输入不同参数即可,但是我们需要用到两张图片一张是普通的图片,背景为白色
此为Blueplane
另一张图片背景也是白色,但是有颜色的区域都是黑色
此为Bluemask
以上两种方法都能将图片一部分变透明,两种方法都有各自的优缺点,需要自己取舍.