vc显示jpg,gif图像简单方法

来源:互联网 发布:ips显示器知乎 编辑:程序博客网 时间:2024/05/01 14:47

VC没有直接显示JPG图片的方法,在网上找了个比较简单的列子自己改了下,还挺好用,下面一个函数就行了

[cpp] view plaincopyprint?
  1. ShowJpgGif(CDC* pDC,CString strPath, int x, int y)  
  2. {  
  3.       IStream *pStm;   
  4.       CFileStatus fstatus;   
  5.       CFile file;   
  6.       LONG cb;   
  7.       if (file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1))   
  8.       {   
  9.             HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);   
  10.             LPVOID pvData = NULL;   
  11.             if (hGlobal != NULL)   
  12.             {   
  13.                   pvData = GlobalLock(hGlobal);  
  14.                   if (pvData != NULL)   
  15.                   {   
  16.                         file.Read(pvData, cb);   
  17.                         GlobalUnlock(hGlobal);   
  18.                         CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);   
  19.                   }  
  20.             }  
  21.       }  
  22.       else  
  23.             return false;  
  24.       //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,  
  25.       //要显示动画GIF请使用ACTIVE控//件。  
  26.       IPicture *pPic;  
  27.       //load image from file stream  
  28.       if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))  
  29.       {  
  30.             OLE_XSIZE_HIMETRIC hmWidth;   
  31.             OLE_YSIZE_HIMETRIC hmHeight;   
  32.             pPic->get_Width(&hmWidth);   
  33.             pPic->get_Height(&hmHeight);   
  34.             double fX,fY;   
  35.             //get image height and width  
  36.             fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);   
  37.             fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);   
  38.             //use render function display image  
  39.             if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))   
  40.             {  
  41.                   pPic->Release();  
  42.                   return false;  
  43.             }  
  44.             pPic->Release();  
  45.       }   
  46.       else   
  47.             return false;   
  48.       return true;  
  49. }  
ShowJpgGif(CDC* pDC,CString strPath, int x, int y){      IStream *pStm;       CFileStatus fstatus;       CFile file;       LONG cb;       if (file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1))       {             HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);             LPVOID pvData = NULL;             if (hGlobal != NULL)             {                   pvData = GlobalLock(hGlobal);                  if (pvData != NULL)                   {                         file.Read(pvData, cb);                         GlobalUnlock(hGlobal);                         CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);                   }            }      }      else            return false;      //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,      //要显示动画GIF请使用ACTIVE控//件。      IPicture *pPic;      //load image from file stream      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;             //get image height and width            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);             //use render function display image            if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))             {                  pPic->Release();                  return false;            }            pPic->Release();      }       else             return false;       return true;}


使用方法:

在对话框上放一个cstatic控件IDC_STC_DUMMY,调整控件大小使得图片能够完全显示

[cpp] view plaincopyprint?
  1. CDC* pDC = GetDlgItem(IDC_STC_DUMMY)->GetDC();  

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 u盘内存是假的怎么办 新买的电脑应该怎么办 海尔一体机电脑开不开机怎么办 苹果笔记本系统坏了怎么办 苹果笔记本电脑电池坏了怎么办 苹果笔记本电脑屏幕坏了怎么办 平板开关键坏了怎么办 平板电脑电池坏了怎么办 平板电脑充电口坏了怎么办 平板电脑系统坏了怎么办 平板电脑充电器坏了怎么办 平板电脑触摸屏坏了怎么办 平板电脑关不了机怎么办 平板电脑触摸屏没反应怎么办 平板电脑声音太小怎么办 平板电脑频碎了怎么办? 淘宝直播展示频道排后怎么办 网店头像改不了怎么办 被骗了7500追不回来怎么办 steam中国版原来的游戏怎么办 老公买驾照被骗妻子应该怎么办 被淘密码骗了怎么办 逛街手机没电了怎么办 电脑登入密码忘了怎么办 晚上睡不好觉经常做梦怎么办 开淘宝店开始零销量怎么办 淘宝店开直通车后销量怎么办 淘宝直播一开始直播没人该怎么办 淘宝店铺访客数据下滑怎么办 2个ctrl键都失灵怎么办 淘宝上搜索不到很久以前订单怎么办 关键词找不到了是不是被降权怎么办 购买小程序关键词想退款怎么办? 浏览器审查元素不拆分关键词怎么办 拼多多商品想重新编辑怎么办 新开店铺没有销量怎么办 新开的店铺没有销量怎么办 淘宝的商品权重下降是怎么办 360n5手机耗电快怎么办 怪兽充电宝丢了怎么办 有已处置的评价怎么办