使用COM组件的IPicture接口---实现图片显示

       mfc 中 显示位图容易  但是显示JPG等格式却比较麻烦, 在此使用IPicture接口可以很方便的显示bmp,jpg,gif等格式图片 , 但此接口不支持tif  png格式的图片。

 

void ShowImage(CString str)
{
CclientDC dc(this);
IPicture * pImg;
IStream  * pStm;

CFileStatus fstatus;
CFile file;
LONG  cb;
if (file.Open (str,CFile::modeRead)&&file.GetStatus (str,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)))
         {
            pStm->Release ();
            OLE_XSIZE_HIMETRIC hmWidth;
            OLE_YSIZE_HIMETRIC hmHeight;
            
            pImg->get_Width(&hmWidth);
            pImg->get_Height (&hmHeight);
            CRECT rect;      dc.GetClientRect(&rect);
                       
            pImg->Render(dc,0,0,rect.Width(),rect.Height(),0,hmHeight,hmWidth,-hmHeight,NULL);            }
         else
            AfxMessageBox("Error Loading Picture From Stream!");
      }
   }
}
else
{
   AfxMessageBox("can't Open Image File!");
}

}


参考资料:

http://www.vckbase.com/bbs/prime/viewprime.asp?id=594

http://blog.csdn.net/crearo/article/details/1328974

http://hi.baidu.com/ustc_/blog/item/d7b946ea5bb0cfd4d539c9f7.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值