hur.cn - 华软网

 热门搜索

在内存中有个JPG文件已经作为CFile打开,怎样将它显示在picture control中?

  作者:未知    来源:网络    更新时间:2009/11/9
已经一个jpg文件已经作用CFile 打开如下
CFile pFile;
pFile.open(....);
怎样将它显示在窗口中,当然我知道可以用CImage的load(LPCTSTR pszFileName)之后显示,如果不用这样,
只允许调用pFile来做应该怎么做?


---华软 网友回答---
CFile是用来读写的,你明明知道CImage可以为什么不用?
---华软网友回复---
CFile 其实是从网上下载的一幅图片,这幅图片,我不想在本地存储,如果用Cimage的话,就在本地存储了,
CInternetSession session;
CFile *pFile;
pFile=session.openURL(...);
如果用Cimage.load的话非要先在本在存储,我想知道如果不存储直接显示在picture control中应该怎么做,谢了 JPG图片
---华软网友回复---
你保存到本地,然后LoadImage进来,弄个HBitmap出来就好办的
---华软网友回复---
引用 2 楼 manbug 的回复:
CFile 其实是从网上下载的一幅图片,这幅图片,我不想在本地存储,如果用Cimage的话,就在本地存储了,
CInternetSession session;
CFile *pFile;
pFile=session.openURL(...);
如果用Cimage.load的话非要先在本在存储,我想知道如果不存储直接显示在picture control中应该怎么做,谢了 JPG图片

麻烦

CFile 读进所有字符,放到一个Buffer里面,然后还要转换成一个BYTE的2维数组,最后要通过一个网上很流行的函数将BYTE数组转换成一个Image对象。

---华软网友回复---
找个叫CxImage的类,可以实现内存转换
---华软网友回复---
CMemoryFile?
---华软网友回复---
路过
---华软网友回复---
这段代码可能对你有用,虽然它显示的一个本地的JPG文件,但是主要方法还是对你很合适的:
 IPicture   *pPic;   
  IStream   *pStream;   
    
  CFileStatus   fstatus;   
  CFile   file;   
  LONG   cb;   
    
  if(file.Open("C:\\test.jpg",CFile::modeRead)&&file.GetStatus("C:\\test.jpg",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,&pStream);   
  if(SUCCEEDED(OleLoadPicture(pStream,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(HORZRES)*100.0);   
  fy=(double)pDC->GetDeviceCaps(VERTSIZE)*(double)hmWidth/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);   
  if(FAILED(pPic->Render(*pDC,100,50,(DWORD)fx,(DWORD)fy,0,hmHeight,hmWidth,-hmHeight,NULL)))AfxMessageBox("Failed   To   Render   The   Picture!");   
  pDC->TextOut(120,175,"JPG");   
  pPic->Release();   
  }   
  else   
  {   
  AfxMessageBox("Error   Loading   Picture   From   Stream!");   
  }   
  }   
  }   
  }   
  else   
  {   
  AfxMessageBox("Can't   Open   Image   File!");   
  }
---华软网友回复---
以上这段我看过,是用来显示图片的,没用,要转换成BMP才行,怎么样转呢,要在内存里转才可以      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。