在EVC下怎么显示.JPG格式的图片?

lcl0720   2008-1-26 16:39 楼主
请问各位高手,在EVC下显示.JPG格式的图片要怎么做啊?因为.BMP格式的图片太占内存了.(用API做的)

回复评论 (6)

JPG的话,建议您用.NET吧。
点赞  2008-1-27 21:48
VOImage
点赞  2008-1-27 21:57
这个好多人问过了,自己搜下eeworld的月经贴吧,网上有人实现了一个可显示函数,不占多少内存那种。下来研究下。
点赞  2008-1-27 23:30
谢谢各位指点,我找找!~~
点赞  2008-1-28 08:50
下面是在网上找的代码,可是不知为什么报这样的错误?
Mywork.obj : error LNK2019: unresolved external symbol __imp__OleLoadPicture referenced in function "long __cdecl ShowPic(char *,struct HWND__ *,int,int)" (?ShowPic@@YAJPADPAUHWND__@@HH@Z)
Mywork.obj : error LNK2001: unresolved external symbol _IID_IPicture
Mywork.obj : error LNK2019: unresolved external symbol __imp__CreateStreamOnHGlobal referenced in function "long __cdecl ShowPic(char *,struct HWND__ *,int,int)" (?ShowPic@@YAJPADPAUHWND__@@HH@Z)
emulatorDbg/Mywork.exe : fatal error LNK1120: 3 unresolved externals


//   lpstrFile:文件名(最好是包含路径在内)     
//   hWnd     
//   nScrWidth:输出图片的宽度     
//   nScrHeight:输出图片的高度     
//   nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸      
HRESULT  ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight)     
{     
    HDC   hDC_Temp=GetDC(hWnd);     

    IPicture   *pPic;     
    IStream    *pStm;     
//    AfxOleInit();  
    BOOL   bResult;        
    HANDLE   hFile=NULL;     
//    DWORD   dwFileSize,dwByteRead;   
        LONG  dwFileSize;
        DWORD dwByteRead;
   //打开硬盘中的图形文件     
    hFile=CreateFile(_T("lpstrFile"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);     
    if(hFile!=NULL)//INVALID_HANDLE_value)     
       {     
         dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数     
         if(dwFileSize==0xFFFFFFFF)     
         return   E_FAIL;     
       }     
    else   return   E_FAIL;      
      
//分配全局存储空间     
   HGLOBAL   hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);     
   LPVOID    pvData  = NULL;        
   if(hGlobal == NULL)     
   return  E_FAIL;        
   if((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块     
   return  E_FAIL;        
   ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区        
   GlobalUnlock(hGlobal);        
   CreateStreamOnHGlobal(hGlobal,   TRUE,   &pStm);
//装入图形文件     
   bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);     
//   (LPSTREAM lpstream, LONG lSize, BOOL fRunmode,REFIID riid, LPVOID FAR* lplpvObj);  REFIID riid//创建的Com对象的接口标识符   
   if(FAILED(bResult))     
   return   E_FAIL;        
   OLE_XSIZE_HIMETRIC   hmWidth;//图片的真实宽度     
   OLE_YSIZE_HIMETRIC   hmHeight;//图片的真实高度     
   pPic->get_Width(&hmWidth);     
   pPic->get_Height(&hmHeight);      
//将图形输出到屏幕上(有点像BitBlt)     
  bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);        
  pPic->Release();         
  CloseHandle(hFile);//关闭打开的文件        
  if(SUCCEEDED(bResult))     return   S_OK;      
  else  return   E_FAIL;      
}
点赞  2008-1-28 11:30
请问这个错误要怎么解决?
点赞  2008-1-28 11:30
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复