使用下载的CDib类、怎么从资源里加载位图文件?是CDib::LoadFile(CFile&); @_@

xinlf 2009-03-21 05:59:23
从网上下载了一个CDib的类,使用不好,不知道该怎样将资源里的IDB_BITMAP1加载到里面、请jiangsheng专家能给个代码好吗?下面是CDib类里面的LoadFile函数,
可是不知道该怎么在外部调用、@_@

/*************************************************************************
* 函数名称:LoadFile(CFile& file)
* 函数参数:
* CFile& file,要读取得文件文件CFile
* 函数类型:HGLOBAL
* 函数功能:将指定的文件中的DIB对象读到指定的内存区域中
*************************************************************************/

HGLOBAL CDib::LoadFile(CFile& file)
{


DWORD dwFileSize;

dwFileSize= file.GetLength();//获取文件大小
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))// 读取DIB文件头
{
return NULL;// 大小不一致,返回NULL
}
// 如果文件类型不是"BM",其16进制值为0x4d42,则返回并进行相应错误处理
if (bmfHeader.bfType !=0x4d42)
{
return NULL;// 如果不是则返回NULL
}
m_hDib= (HGLOBAL) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwFileSize-sizeof(BITMAPFILEHEADER));// 分配DIB内存
if (m_hDib==NULL)
{
return NULL;// 分配失败,返回NULL
}
/////////////////////////////////////////////////////////////////////////
//给CDib类的成员变量赋值
lpdib = (LPSTR) ::GlobalLock((HGLOBAL) m_hDib);// 锁定
if (file.Read(lpdib, dwFileSize - sizeof(BITMAPFILEHEADER)) !=// 读像素
dwFileSize - sizeof(BITMAPFILEHEADER) )//大小不一致
{
::GlobalUnlock((HGLOBAL) m_hDib); // 解除锁定
::GlobalFree((HGLOBAL) m_hDib); // 释放内存
return NULL;
}
::GlobalUnlock((HGLOBAL) m_hDib);// 解除锁定
return m_hDib;// 返回DIB句柄
}
...全文
278 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hust_terry 2009-03-22
  • 打赏
  • 举报
回复
楼上正解
xinlf 2009-03-22
  • 打赏
  • 举报
回复
掌柜的代码怎么写呀?这样老出错:
File *fl;
OpenFile(fl,"xu.bmp");
wltg2001 2009-03-22
  • 打赏
  • 举报
回复
HGLOBAL CDib::LoadFile(CFile& file)
=========================
你看清楚一点,你的函数参数是什么,是CFile,不是字符串,你给文件名给它有什么用啊,它要的参数是文件指针,不是字符串,用OpenFile之类的先打开的一个文件,用返回的文件指针作参数
eagerle01 2009-03-22
  • 打赏
  • 举报
回复
帮顶
xinlf 2009-03-22
  • 打赏
  • 举报
回复
error C2664: “CDib::LoadFile” : 不能将参数 1 从“CFile *__w64 ”转换为“CFile &”
出现错误、不能运行、
还是改写这个类从内存流或者文件流读取数据、因为这个CDib::LoadFile(CFile& file)就是个引用不能赋值的、
专家给一下代码好吗?老大、真心谢谢你了!求求你了!@_@
蒋晟 2009-03-22
  • 打赏
  • 举报
回复
改写这个类以从内存流或者文件流读取数据。
cnzdgs 2009-03-22
  • 打赏
  • 举报
回复
我前面不是贴了代码了吗。
cnzdgs 2009-03-21
  • 打赏
  • 举报
回复
构造一个CDib对象,再构造一个CFile对象,然后调用CDib对象的LoadFile函数。例如:
CDib dib;
CFile file(_T("bmp文件及路径"), CFile::modeRead);
dib.LoadFile(file);

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧