前言:图片格式全是.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);
飞机原图:
效果:
来源:CSDN
作者:Eoneanyna
链接:https://blog.csdn.net/Eoneanyna/article/details/104522944