CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何从资源中加载JPG文件资源?

楼主wxshzf(oldriver)2005-11-23 11:55:52 在 VC/MFC / 基础类 提问

我将一个JPG文件如MyImage.JPG通过Import导入到了资源中,不知道如何加载到内存中,我会从磁盘文件加载到内存并显示(用IPicture类中的OleLoadPcture),就不知道如何从资源加载,即不了解资源加载的一些函数,请高手们指点!! 问题点数:50、回复次数:5Top

1 楼happyparrot(快乐鹦鹉)回复于 2005-11-23 12:17:55 得分 10

LPTSTR   MAKEINTRESOURCE(   WORD   wInteger;   );  
  参数是ID号,返回的是字符串类型。Top

2 楼dingpiao(.......)回复于 2005-11-23 12:26:50 得分 0

CRect   rect;  
  CDC*   pDC;  
  IPicture   *pPic;    
  IStream   *pStm;    
   
  CFileStatus   fstatus;    
  CFile   file;    
  LONG   cb;    
   
  if   (file.Open(imgName,CFile::modeRead)&&file.GetStatus(imgName,fstatus)&&    
  ((cb   =   fstatus.m_size)   !=   -1))    
  {    
  HGLOBAL   hGlobal   =   GlobalAlloc(GMEM_MOVEABLE,   cb);    
  LPVOID   pvData   =   NULL;    
  if   (hGlobal   !=   NULL)    
  {    
  if   ((pvData   =   GlobalLock(hGlobal))   !=   NULL)    
  {  
  file.ReadHuge(pvData,   cb);    
  GlobalUnlock(hGlobal);    
  CreateStreamOnHGlobal(hGlobal,   TRUE,   &pStm);    
   
  if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))    
  {    
  OLE_XSIZE_HIMETRIC   hmWidth;    
  OLE_YSIZE_HIMETRIC   hmHeight;    
   
  pPic->get_Width(&hmWidth);    
  pPic->get_Height(&hmHeight);    
   
  // double   fX,fY;    
  // fX   =   (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);    
  // fY   =   (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);    
  // if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))    
  double   fX,fY;    
  fX   =   640;  
  fY   =   480;  
   
   
  pDC   =   GetDlgItem(IDC_STATIC_PIC_BIG)->GetDC();  
   
  // GetDlgItem(IDC_STATIC_PIC_BIG)->EnableWindow(true);  
  // GetDlgItem(IDC_STATIC_PIC)->EnableWindow(false);  
  GetDlgItem(IDC_STATIC_PIC_BIG)->GetWindowRect(rect);  
  if(FAILED(pPic->Render(*pDC,0,0,(DWORD)(rect.right   -   rect.left),(DWORD)(rect.bottom   -   rect.top),0,hmHeight,hmWidth,-hmHeight,NULL)))    
  {  
  // AfxMessageBox("Failed   To   Render   The   picture!");    
  pPic->Release();  
  file.Close();  
  ReleaseDC(pDC);  
  return   false;  
  }  
  else  
  {  
  pPic->Release();  
  file.Close();  
  ReleaseDC(pDC);  
  return   true;  
  }  
   
   
  }    
  else    
  {  
  // AfxMessageBox("Error   Loading   Picture   From   Stream!");    
  file.Close();  
  return   false;  
  }  
  }    
  }    
  }    
  else  
  {// AfxMessageBox("Can't   Open   Image   File!");  
  return   false;  
  }Top

3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-11-23 12:31:27 得分 15

if   (hRsrc   =   FindResource(hInstance,   ID_JPG,   "JPG"))  
        {  
              hTemp   =   LoadResource(hInstance,   hRsrc);  
              dwSize   =   SizeofResource(hInstance,   hRsrc);  
              lpRes   =   LockResource(hTemp);  
   
          hGlobal   =   GlobalAlloc(GHND,   dwSize);  
          lpNew   =   GlobalLock(hGlobal);  
  }Top

4 楼koko1998(高价购买火车票)回复于 2005-11-23 12:42:13 得分 25

ZT   FAQ  
   
  这是显示在PICTURE的  
  my   example:  
  HBITMAP   CPicture::LoadImageFromID(UINT   nIDRes)  
  {  
  try  
  {  
  HMODULE   hInst=GetModuleHandle(NULL);  
  LPCTSTR   lpRes   =   MAKEINTRESOURCE(nIDRes);  
  HRSRC   hRsrc   =   ::FindResource(hInst,   lpRes,   "JPG");  
  if   (NULL   ==   hRsrc)  
  return   FALSE;  
   
  HGLOBAL   hGlobal   =   LoadResource(hInst,   hRsrc);  
  if   (NULL   ==   hGlobal)  
  return   FALSE;  
   
  DWORD   dwSize   =   SizeofResource(hInst,   hRsrc);  
  LPVOID   lpData   =   LockResource(hGlobal);  
  if   (NULL   ==   lpData)  
  return   FALSE;  
   
  //   alloc   memory   based   on   file   size  
  HGLOBAL   hJPG   =   ::GlobalAlloc(GMEM_MOVEABLE,   dwSize);  
  LPVOID   lpJGP   =   ::GlobalLock(hJPG);  
  memcpy(lpJGP,   lpData,   dwSize);  
  ::GlobalUnlock(hJPG);  
   
  //LPVOID   pvData   =   GlobalLock(hGlobal);  
  //_ASSERTE(NULL   !=   pvData);  
   
  //   read   file   and   store   in   global   memory  
   
  LPSTREAM   pstm   =   NULL;  
  //   create   IStream*   from   global   memory  
  HRESULT   hr   =   CreateStreamOnHGlobal(hJPG,   TRUE,   &pstm);  
  _ASSERTE(SUCCEEDED(hr)   &&   pstm);  
   
  //   Create   IPicture   from   image   file  
  LPPICTURE   gpPicture;  
   
  hr   =   ::OleLoadPicture(pstm,   dwSize,   FALSE,   IID_IPicture,   (LPVOID   *)&gpPicture);  
  _ASSERTE(SUCCEEDED(hr)   &&   gpPicture);  
  pstm->Release();  
   
  OLE_HANDLE   m_picHandle;  
   
  gpPicture->get_Handle(&m_picHandle);  
  return   (HBITMAP)m_picHandle;  
  }  
  catch   (...)  
  {  
   
  }  
  return   NULL;  
  }  
  //call    
  CPicture   pic;    
  HBITMAP   hbmp=pic.LoadImageFromID(IDR_TODAY);//IDR_TODAY   is   jpg   id  
  (HBITMAP)::SendMessage(::GetDlgItem(this->m_hWnd,IDC_TODAY),   STM_SETIMAGE,   IMAGE_BITMAP,   (LPARAM)hbmp);  
   
   
  我有现成的代码,http://www.cdcz.mpc.cn/data/static.rar,下载后将代码放到工程就可以了,使用的时候用映射一个控制变量,使用CStaticPicEx代替CStatic类,然后使用成员函数SetShowFileName(CString   strFileName),其中strFileName为JPEG文件名。  
  Top

5 楼wxshzf(oldriver)回复于 2005-11-23 14:00:46 得分 0

首先感谢几位大侠的指点,这就献分!Top

相关问题

  • 怎么加载资源文件
  • 如何加载DLL里的资源文件?
  • 关于在类中加载资源文件的问题
  • 关于加载资源文件的问题
  • 图标加载成资源文件后,如何放到系统托盘区?
  • 各路高手,请问,如何动态加载资源文件(.res)
  • 请教一个关于dll文件中加载资源的问题?
  • 请教大虾:如何将一张图片加入资源文件中,并从资源加载?
  • 加载frm文件出错
  • 加载swf文件问题

关键词

  • 文件
  • idc
  • hglobal
  • 加载
  • hrsrc
  • ppic
  • hmheight
  • hjpg
  • hmwidth
  • pstm

得分解答快速导航

  • 帖主:wxshzf
  • happyparrot
  • goodboyws
  • koko1998

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo