`

图像编程----如何实现一个透空图片

 
阅读更多

   在mfc中,我们经常碰到的一个情况是,想在界面上添加一个图片,比方说一个小人,但是我们不想要除了图片中小人外的其它图片,怎么办?

   我们需要准备三个素材,第一个背景图片,第二个你想要添加的原始小人图片(除小人外其余地方为黑色),第三个屏蔽图片,该图片将你想要扣出来的图片的区域全部涂成黑色,其余部位为白色。


                                          
 
                          原始要加载的图片                                           屏蔽图,需要的为黑,不需要的为白

   

 



 

                                                                 

                                                                               背景图

 那么只要下面两个步骤就可以了:

步骤一: 使用bitblt函数将屏蔽图与背景图做AND运算,贴到目的地DC中

步骤二: 再以要透空的图与背景图做OR运算,贴到目的地DC中

void CMyDlg::OnPaint() 
{
	
	CPaintDC dc(this);
	CDC *mdc = new CDC; //建立一个暂存DC
	CBitmap *bitmap1 = new CBitmap; //建立源位图
    CBitmap *bitmap2 = new CBitmap; //用于反色的源图
	CBitmap *bgbmp = new CBitmap;//背景图片
    
	CRect rect;
	GetClientRect(&rect);
	mdc->CreateCompatibleDC(&dc);
	if(NULL == (bgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE)))
		AfxMessageBox("加载背景图片出错");
    
	if(NULL == (bitmap1->m_hObject = (HBITMAP)::LoadImage(NULL,"2.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE)))
		AfxMessageBox("加载源图图片出错");
    
	if(NULL == (bitmap2->m_hObject = (HBITMAP)::LoadImage(NULL,"3.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE)))
		AfxMessageBox("加载源图反色图片出错");

	mdc->SelectObject(bgbmp);//取得背景图
	dc.BitBlt(0,0,rect.right,rect.bottom,mdc,0,0,SRCCOPY);

	mdc->SelectObject(bitmap2);
	dc.BitBlt(0,0,rect.right/2+70,rect.bottom/2+30,mdc,40,40,SRCAND);

	mdc->SelectObject(bitmap1);
	dc.BitBlt(0,0,rect.right/2+70,rect.bottom/2+30,mdc,40,40,SRCPAINT);
}

 效果图如下:


                         
 

  • 大小: 888 Bytes
  • 大小: 358 Bytes
  • 大小: 1.3 MB
  • 大小: 253.5 KB
分享到:
评论

相关推荐

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例150 打印一个空学生证 264 实例151 自定义横向或纵向打印 266 实例152 自定义打印页码范围 268 第14章 文件及数据流技术 271 实例153 根据日期动态建立文件 272 实例154 将长文件名转换成短文件名 273 实例155 ...

    window32 API大全 win32编程

    使用键盘加速键函数可以拷贝、创建、加载或删除加速键表,* 图标是一个图片,由一个位图图像组成,并和一个掩码组合构成该图片的透明区域。当提到图标时,可以是下列两种情况: 1)单个图标图像。资源类型为RT_ICON...

    vc++ 开发实例源码包

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    C#.net_经典编程例子400个

    173 4.3 图像预览 175 实例119 局部图像放大 175 实例120 浏览大图片 177 实例121 剪切图片 178 实例122 图像旋转 181 实例123 鼠标拖拽图像 182 4.4 图形缩放与变换 183 ...

    Visual C++实效编程百例光盘源代码

    第1章 界面外观   实例1 带图标的菜单  ... 实例106 建立一个快捷方式   实例107 设置程序为自动被执行   实例108 注册与卸载OCX   实例109 限定程序的使用时限   实例110 在IE工具栏中加入快捷图标

    C#编程经验技巧宝典

    72 <br>0102 将字符串首字母转换大写 72 <br>0103 如何进行字节数组和字符串的相互转换 72 <br>0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 <br>4.2 获取字符串信息 73 ...

    C++ MFC实现飞机大战游戏

     绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。  在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个...

    vc++ 应用源码包_1

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_6

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_5

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_2

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    vc++ 应用源码包_3

    电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口,然后读取内容,匹配用户名与密码等。 CFile64_src 操作大...

    C#程序开发范例宝典(第2版).part08

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN查询 实例275 RIGHT OUTER JOIN查询 实例276 使用外连接进行多表联合查询 9.15 利用IN进行查询 实例277 ...

    易语言 茶凉专用模块

    参数 图标文件, 文本型, 可空, 图标文件的路径 可空:为空时用目标的第一个图标 .参数 运行方式, 整数型, 可空, 1,常规方式,3,最大化,7,最小化 .参数 备注, 文本型, 可空, 快方式的备注信息 .参数 快捷键, 文本型, ...

    C#程序开发范例宝典(第2版).part13

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part02

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part12

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

Global site tag (gtag.js) - Google Analytics