CBitmap对象直接加载外部图像的方法
来源:互联网 发布:centos nginx yum 安装 编辑:程序博客网 时间:2024/04/28 13:49
在初始化CBitmap对象时,常用Cbitmap::LoadBitmap,即如下两种:
BOOL LoadBitmap(LPCTSTR lpszRecourceName);
BOOL LoadBitmap(UINT nIDResource);
MSDN中的说明为:
返回值:调用成功时返回非0值,否则为0。
lpszResourceName指向一个包含了位图资源名字的字符串(该字符串以null结尾)。NIDResource指定位图资源中资源的ID号。说明本函数从应用的可执行文件中加载由lpszResourceName指定名字或者由nIDResource指定的ID号标志的位图资源。加载的位图被附在Cbitmap对象上。如果由lpszResourceName指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回。可以调用函数CgdiObject::DeleteObject删除由LoadBitmap加载的位图,否则Cbitmap的析构函数将删除该位图对象。
警告:在删除位图对象之前,要保证它没有被选到设备上下文中。在Windows3.1以及以后的版本中,增加了如下的位:OBM_UPARROWIORM_DNARROWIOBM_RGARROWIOBM_LFARROWI ......
刚开始用的时候,我直接把图像路径名给了 lpszRecourceName,可总是不成功.仔细检查了程序,也没发现错误.可为什么呢?...CSDN一查才发现问题出在 lpszRecourceName上. lpszRecourceName按字面意思好像是"指向资源的名称字符串",可实际呢?却不是一般理解的磁盘上的资源文件名,而是VC工程内部已导入的资源名,所以把外部文件的名称赋给它当然不成功了.问题怎么解决呢?---用API函数HBITMAPLoadImage("文件名");不过该函数返回的是指向Load图片的句柄,所以需要用到CBitmap的Attach方法:
注意如果使用Pictrue Control控件来显示图像的话,一定要将控件的Type属性设置为Bitmap。
//直接从外部文件加载图片
HBITMAP bitmap;
bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),strFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_backBitmap.DeleteObject();
if(!m_backBitmap.Attach(bitmap))
{
MessageBox("导入背景图失败!","提示",MB_OK);
return;
}
****************************************
void CitemView::getBitMap( CDC *pDC )
{
CDC MemDC;
HBITMAP hBmp;
BITMAP bm;
CBitmap Bitmap;
CPoint point( 10, 10);
CString cStr;
//hBmp = (HBITMAP)::LoadImage(NULL,"BG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"BG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
Bitmap.DeleteObject();
Bitmap.Attach( hBmp );
Bitmap.GetObject(sizeof(BITMAP),&bm);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&Bitmap);
pDC->BitBlt(point.x, point.y, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
MemDC.DeleteDC();
}
***************************************************
请问LoadBitmap( LPCTSTR lpszResourceName )中lpszResourceName 是指哪个名字
BOOL LoadBitmap(LPCTSTR lpszResourceName);
BOOL LoadBitmap(UINT nIDResource);
nIDResource 是指资源ID
但lpszResourceName是指什么呢
比如:我创建了一个BITMAP资源IDB_BITMAP1 ; lpszResourceName是指什么呢,是硬盘上的bitmap1.bmp吗,如果是,以下代码为什么是错的。
CBitmap bmp;
bmp.LoadBitmap("d:\\..\\res\\bitmpa1.bmp");
CDC memdc;
BITMAP bmstru;
bmp.GetBitmap(&bmstru);
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&bmp);
pDC->BitBlt(0,0,bmstru.bmWidth,bmstru.bmHeight,&memdc,0,0,SRCCOPY);
用Notepad打开*.rc文件,找到类似下面一行:
IDB_BITMAP BITMAP "res\\background.bmp"
改成:
Bitmap1 BITMAP "res\background.bmp"
或者,在VC中察看位图资源的属性,将其ID栏内改为"Bitmap"(注意,一定要加引号)。
然后调用:
bmp.LoadBitmap("Bitmap1");
保证成功。
资源可以用一个整数来标示,也可以用一个字符串标示。但无论如何,这些ID都不是指位图文件名。不要将它们混淆。
转载自:
http://kingsong1980.blog.163.com/blog/static/1060113262010725101349850/
- CBitmap对象直接加载外部图像的方法
- CBitmap类图像数据加载成功的判断
- 绘制CBitmap的方法
- MFC CBitmap 对象的拷贝
- CBitmap拷贝函数(根据一个CBitmap对象创建另一个相同的CBitmap对象)
- 如何得到CBitmap对象加载的位图结构信息,例如长度和宽度,
- 在CBitmap类中加载图像/图片文件
- MFC中CBitmap的简单复制方法 (Copy CBitmap)
- MFC中CBitmap的简单复制方法 (Copy CBitmap)
- 从文件中加载位图到 CBitmap对象
- 加载外部图像、SWF文件
- as3加载外部图片的方法详解
- 加载外部图片的三种方法
- 保存CBitmap图片到硬盘的方法
- CBitmap图像拷贝
- C#直接使用DllImport外部Dll的方法
- C#直接使用DllImport外部Dll的方法
- ICON和CBitmap图片的加载及获取其大小
- Spring中IoC的入门实例
- 多线程编程指南[中文完整翻译版] – Threading Programming Guide
- 解压缩后为0个字节
- suse linux 下JDK安装
- Android 文件系统分析
- CBitmap对象直接加载外部图像的方法
- 获取iphone ip 非私有方法 iphone xcode
- sigmoid函数
- struts2:知识点总结
- PHP is_null()与isset()
- Google Code checkout v8 方法
- 直方图均衡化的算法和代码
- POJ 3621
- poj 2689 Prime Distance 二次筛素数