MFC中比较重要的一部分学习内容即是绘图,而绘图时我们会发现如果想插入一张图片而又不想要图片的背景,或者已经把图片的背景用Ps去掉了,但是在MFC窗口中显示图片的时候又有了白色的背景,这个时候就可以使用TransparentBlt函数(通常支持位图)来实现将图片背景变透明。
一、添加位图。
在资源视图中,右击 项目.rc —>添加资源 —>Bitmap —>导入是已有的图片,新建是自己绘制。—>选择需要添加的图片
添加完成后,资源视图Bitmap中看到的图片的名字就是图片的ID,注意确保Resource.h文件中已有了图片的声明。
二、TransparentBlt函数的使用
TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下:
BOOL TransparentBlt(
HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int hHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度,必须小于或等于位图的实际宽度
int nHeightSrc, // 源高度,必须小于或等于位图的实际高度
UINT crTransparent // 透明色,COLORREF类型
使用示例:
CPaintDC dc(this);//创建一个dc
CBitmap ObcBMP,*pOldImageBMP;
BITMAP bmp;
ObcBMP.LoadBitmap(IDB_BITMAP1);//从资源加载位图(括号中即为位图的ID)
ObcBMP.GetObject(sizeof BITMAP,&bmp);//获取位图的宽高等信息
CDC ImageDC;
ImageDC.CreateCompatibleDC(&dc);
pOldImageBMP = ImageDC.SelectObject(&ObcBMP);//将之前对象保存
TransparentBlt(dc.m_hDC,0,0,30,48,ImageDC.m_hDC,0,0,30,48,RGB(255,255,255));//设置白色为透明色
ImageDC.SelectObject(pOldImageBMP);
Transparent的最后一个参数为RGB(),若设置白色背景透明则参数为RGB(255,255,255), 若设置黑色背景透明则参数为RGB(0,0,0)
本文就简单介绍TransparentBlt函数的用法,如果想深入了解可以查阅我的参考文章:
http://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41490929
http://www.360doc.com/content/14/0213/18/15753510_352255712.shtml
http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391945.html