关于MFC的游戏开发学习(二)游戏图片的显示及透明处理

一笑奈何 提交于 2020-03-01 11:04:44

前言:图片格式全是.bmp格式

遇到的问题:

在学习基于vs的mfc的框架中,在添加位图一步出了错。
明明图片是.bmp格式导入vs之后却不是。
后来发现是位图转换不成功,后来找了格式工厂软件用来转换位图就成功了。

知识点:

.bmp文件主要由四个部分组成:位图文件头/位图信息头/调色板/位图数据
创建一个窗口之后,显示的屏幕划分为三个区域:屏幕区,窗口区,窗口内部区

透明位图的原理:
黑色RGB(0,0,0)
二进制为:00000000,00000000,00000000
白色(255,255,255)
二进制为:11111111,11111111,11111111

白色与任意色进行与操作=任意色
黑色与任意色进行与操作=黑色
黑色与任意色进行或操作=任意色

显示图片的流程:
1.获取窗口DC
2.创建位图并调用函数LoadImage装载图标,光标或位图
3.定义并创建一个内存设备环境DC,调用函数CreateCompatibleDC创建兼容的DC
4.调用函数SelectObject将位图选入兼容内存设备环境DC中
5.将兼容的DC中的位图填到当前的DC中,调用函数BitBlt显示图像。
6.恢复临时DC的位图,删除内存中的位图,删除兼容的DC,及释放内存资源。

1.添加需要的图片到资源里
右键点击bitmap 点击下属选项添加资源在这里插入图片描述
选择位图,点击导入
再添加你的.bmp图片即可

添加完成后:

在这里插入图片描述

这是我添加的图片 名字是有使用地方的,如我的背景图被名为(IDB_BITMAP5

在这里插入图片描述

背景图显示代码:

HDC hDC = ::GetDC(this->m_hWnd);//获取主窗口的内部窗口区域
	HBITMAP hbmp = (HBITMAP)::LoadImage(::GetModuleHandle(NULL), (LPCSTR)IDB_BITMAP5, IMAGE_BITMAP, 0, 0, NULL);//加载背景图
	HDC hmdc = ::CreateCompatibleDC(hDC);//创建兼容的DC
	::SelectObject(hmdc, hbmp);//调用函数SelectObject将位图选入兼容内存设备环境DC中
	::BitBlt(hDC, x, y, 580, 800, hmdc, 0, 0, SRCCOPY);//将兼容的DC中的位图填到当前的DC中,调用函数BitBlt显示图像。
	::DeleteDC(hmdc);//释放资源
	::ReleaseDC(this->m_hWnd, hDC);

飞机图片透明化代码:

HDC hDC1 = ::GetDC(this->m_hWnd);//获取主窗口的内部窗口区域
	HBITMAP hbmp1 = (HBITMAP)::LoadImage(::GetModuleHandle(NULL), (LPCSTR)IDB_BITMAP2, IMAGE_BITMAP, 0, 0, NULL);//加载图片
	HDC hmdc1 = ::CreateCompatibleDC(hDC1);//创建兼容的DC
	::SelectObject(hmdc1, hbmp1);//调用函数SelectObject将位图选入兼容内存设备环境DC中
	::TransparentBlt(hDC1, x, y, 40, 40, hmdc1, 0, 0, 40, 40, RGB(255, 255, 255));//将兼容的DC中的位图填到当前的DC中,调用函数BitBlt显示图像。
	//x,y为左上角显示的第一个像素点一般为0,0(这里我初始化了其他数据)
	//40,40是指图片的大小,RGB(255,255,255)为透明化的颜色,相当于白色扣掉
	::DeleteDC(hmdc1);//释放资源
	::ReleaseDC(this->m_hWnd, hDC1);

飞机原图:
在这里插入图片描述效果:
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!