MFC 贴透明贴图

至今做过两个项目,两个项目都需要用到透明贴图效果,但是使用了两种方法:

方法一:

				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



以上两种方法都能将图片一部分变透明,两种方法都有各自的优缺点,需要自己取舍.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值