[转]BMP图片的加载方式:资源方式 和 文件方式

转自http://www.cnblogs.com/songliquan/p/3394292.html

第一、在资源里加载位图

  这种方法就是在工程里的“资源视图”-->“添加资源”-->"Bitmap"-->"导入位图"

  每个资源都会有一个资源ID,使用位图时就通过资源ID对他进行控制。

  然后在设置背景图片是只需在OnPaint();里添加如下

复制代码
复制代码
        CPaintDC dc(this);
        CRect rc;
        GetClientRect(&rc);

        CDC memDC;//目标内存
        memDC.CreateCompatibleDC(&dc);//创建内存兼容环境
        CBitmap bmpBackground;
        bmpBackground.LoadBitmap(IDB_BITMAP1);//资源ID
        BITMAP bitmap;
        bmpBackground.GetBitmap(&bitmap);//获取位图
        CBitmap *oldbtimap = memDC.SelectObject(&bmpBackground);

        dc.StretchBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//
复制代码
复制代码

  这样直接运行就可以显示位图了,但是有个缺点就是,如果位图比较大的话,最终生成的应用程序会很大,位图会包含在exe程序中,如果位图比较多的话,应用程序的大小就比较恐怖了,估计要几十兆了。

第二、在文件中直接加载

  这种方法用到函数LoadImage();//从文件中加载位图

复制代码
复制代码
1 HANDLE WINAPI LoadImage(
2   _In_opt_  HINSTANCE hinst,//实例句柄
3   _In_      LPCTSTR lpszName,//文件名
4   _In_      UINT uType,//文件类型,包括IMAGE_BITMAP,IMAGE_CURSOR,IMAGE_ICON
5   _In_      int cxDesired,//这个在加载ICON时使用
6   _In_      int cyDesired,//
7   _In_      UINT fuLoad//加载的方式 ,如LR_LOADFROMFILE
8 );
复制代码
复制代码

  使用方法如下:

复制代码
复制代码
 1         CPaintDC dc(this);
 2         CRect rc;
 3         GetClientRect(&rc);
 4 
 5         CBitmap bmpBackground;
 6         bmpBackground.DeleteObject();
 7         HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,L"Background.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);//加载位图
 8         bmpBackground.Attach(hBitmap);//绑定
 9 
10         CDC memDC;//目标内存
11         memDC.CreateCompatibleDC(&dc);//创建内存兼容环境
12         memDC.SelectObject(bmpBackground.m_hObject);//
13         dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
复制代码
复制代码

  这种方法加载位图只需将图片和应用程序放在同一个目录下,生成的应用程序不会和位图产生太大的关联,会很小,而且还可以自己替换背景图片。

  总结一下,感觉还是第二种方法比较方便,生成的应用程序很小,位图可以自己替换。

posted @   曦花  阅读(294)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示