BMP图片的加载方式:资源 VS 文件
在程序中加载位图有很多方法,各有各的好处。这里简单说一下在资源里和文件里加载的区别。
第一、在资源里加载位图
这种方法就是在工程里的“资源视图”-->“添加资源”-->"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);
这种方法加载位图只需将图片和应用程序放在同一个目录下,生成的应用程序不会和位图产生太大的关联,会很小,而且还可以自己替换背景图片。
总结一下,感觉还是第二种方法比较方便,生成的应用程序很小,位图可以自己替换。
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/3394292.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?