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(,,rc.Width(),rc.Height(),&memDC,,,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);//
这样直接运行就可以显示位图了,但是有个缺点就是,如果位图比较大的话,最终生成的应用程序会很大,位图会包含在exe程序中,如果位图比较多的话,应用程序的大小就比较恐怖了,估计要几十兆了。
第二、在文件中直接加载
这种方法用到函数LoadImage();//从文件中加载位图
HANDLE WINAPI LoadImage(
_In_opt_ HINSTANCE hinst,//实例句柄
_In_ LPCTSTR lpszName,//文件名
_In_ UINT uType,//文件类型,包括IMAGE_BITMAP,IMAGE_CURSOR,IMAGE_ICON
_In_ int cxDesired,//这个在加载ICON时使用
_In_ int cyDesired,//
_In_ UINT fuLoad//加载的方式 ,如LR_LOADFROMFILE
);
使用方法如下:
CPaintDC dc(this);
CRect rc;
GetClientRect(&rc); CBitmap bmpBackground;
bmpBackground.DeleteObject();
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,L"Background.bmp",IMAGE_BITMAP,,,LR_LOADFROMFILE);//加载位图
bmpBackground.Attach(hBitmap);//绑定 CDC memDC;//目标内存
memDC.CreateCompatibleDC(&dc);//创建内存兼容环境
memDC.SelectObject(bmpBackground.m_hObject);//
dc.BitBlt(,,rc.Width(),rc.Height(),&memDC,,,SRCCOPY);
这种方法加载位图只需将图片和应用程序放在同一个目录下,生成的应用程序不会和位图产生太大的关联,会很小,而且还可以自己替换背景图片。
总结一下,感觉还是第二种方法比较方便,生成的应用程序很小,位图可以自己替换。
BMP图片的加载方式:资源 VS 文件的更多相关文章
- Vue中图片的加载方式
一.前言 VUE项目中图片的加载是必须的,那么vue中图片的加载方式有哪些呢,今天博主就抽点时间来为大家大概地捋一捋. 二.图片的加载方法 1.在本地加载图片(静态加载) 图片存放assets文件夹中 ...
- 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式
Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...
- iOS WebView 加载本地资源(图片,文件等)
https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- 前端实现图片懒加载(lazyload)的两种方式
在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽.这也就是们通 ...
- JavaScript判断图片是否加载完成的三种方式
JavaScript判断图片是否加载完成的三种方式 有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 1 2 3 4 5 6 7 8 9 10 ...
- 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式
渐进式jpeg(progressive jpeg)图片及其相关 一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...
- 使用JavaScript判断图片是否加载完成的三种实现方式
有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> ...
- Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include().
Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include(). ...
随机推荐
- Android stutdio2.2 启动模拟器出现“/dev/kvm is not found.”解决方法
第一次启动avd,Android stutdio会自动安装Intel HAXM,而且表面看是成功的,再次启动会出现“/dev/kvm is not found.”,这说明Intel HAXM没有安装成 ...
- 9.26<立方网>技术笔试题
该公司题目感觉不难,算法设计有三道大题. 1.设有m和n两个整数,求它们的最大公约数和最小公倍数. 2.猴子分桃问题,每次分桃多一个,共有五个猴子,问最少有多少个桃子. 3.关于java的题目,有A, ...
- zabbix中监控项报错
报错信息: zabbix报错(Not all processes could be identified, non-owned process info will not be shown, you ...
- vue指令总结(二)
一.vue指令 1.v-text v-text是用于操作纯文本,它会替代显示对应的数据对象上的值.当绑定的数据对象上的值发生改变,插值处的内容也会随之更新.注意:此处为单向绑定,数据对象上的值改变,插 ...
- 爬虫系统Lucene分词
思路:查询数据库中信息,查询出id和name把那么进行分词存入文件 package com.open1111.index; import java.io.IOException;import java ...
- mac上Apache修改目录浏览权限
sudo vim /etc/apache2/httpd.conf <Directory "/Library/WebServer/Documents"> # # Poss ...
- [译文]详细解析如何做一款成功的APP应用
译者注: 本文作者从自身丰富的应用开发设计实践经验和大量的优秀应用实例中,总结提炼了从产品概念.设计.开发到市场推广等一系列的相关原则,指导移动开发人员怎样来打造一款成功赚钱的应用.姗姗来迟的这篇文章 ...
- hdu-1532 Drainage Ditches---最大流模板题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 给出有向图以及边的最大容量,求从1到n的最大流 思路: 传送门:最大流的增广路算法 ...
- mkfs.xfs 命令找不到的解决方法
对硬盘进行格式化: # mkfs.xfs /dev/sdb1 系统显示: mkfs.xfs error: command not found. 可能是系统不完全安装 运行 which mkfs 查看 ...
- 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)
点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...