TransparentBlt函数使用注意事项

TransparentBlt是系统的API函数,用于在两个DC之间进行掩码色贴图。其函数原型如下:

BOOL TransparentBlt(
HDC hdcDest,    //目标DC的句柄可以通过hdcDest .m_hDC获取
int nXOriginDest,  //指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示
int nYOriginDest,  //指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示
int nWidthDest,    //指定目标矩形的宽度
int hHeightDest,    //指定目标矩形的高度
HDC hdcSrc,      //源DC的句柄可以通过hdcSrc .m_hDC获取
int nXOriginSrc,   //指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示
int nYOriginSrc,  //指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示
int nWidthSrc,   / /指定源矩形的宽度
int nHeightSrc,  //指定源矩形的高度
UINT crTransparent //掩码色
);

在使用该函数进行贴图的过程中发现图片总是贴不上,后来查看MSDN得知该函数如果执行成功会返回TRUE,如果失败则会返回FALSE;

于是尝试写判断语句看函数能否成功执行

if(!TransparentBlt(dc.m_hDC,0,0,rc.Width(),rc.Height(),m_dc.m_hDC,0,0,,rc.Width(),rc.Height(),RGB(255,255,255)))
              {
                     AfxMessageBox("error");
              }

发现总是不能执行成功,在测试的时候发现如果将源矩形变小不超过图片大小成功,则执行成功

于是改进代码,通过位图结构体关联CBITMAP获取图片大小

       BITMAP bm;
       m_bmp.GetBitmap(&bm);
 
 
       if(!TransparentBlt(dc.m_hDC,0,0,rc.Width(),rc.Height(),m_dc.m_hDC,0,0,bm.bmWidth,bm.bmHeight,RGB(255,255,255)))
       {
              AfxMessageBox("e");
       }

总结:在使用 TransparentBlt 的过程中需要判断是否执行成功后再贴图,并且源 dc 矩形不得超过图片的矩形大小



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值