msvc下显示jpg图片方法之一

在vc中显示bmp图像比较容易,但显示jpg,png等其它格式就没那么容易,一般有几种方法可以考虑,一是用图像控件,但一般要下载并注册,二是采用微软的GDI+接口,对它熟悉的话可以使用,再有就是本文采用的一个方法,就是用COM组件的接口IPicture,具体见例子吧。

IPicture* pPic;

       IStream* pStm;

       CFile file;

       CFileStatus fstatus;

       long cb;

       if (file.Open(strPathName, CFile::modeRead) &&

          file.GetStatus( strPathName, fstatus)&&

          ((cb = fstatus.m_size) != -1))

      {

          HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);

          LPVOID pvData = NULL;

          if (hGlobal != NULL)

          {

               if ((pvData = GlobalLock(hGlobal)) != NULL)

               {

                    file.Read(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        

                        CRect rect;

                        GetDlgItem(IDC_STATIC2)->GetClientRect(&rect); //按窗口大小显                    

           // 按实际大小显示

          //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)rect.Width(),

                          (DWORD)rect.Height(), 0, hmHeight, hmWidth, -hmHeight, NULL)))

                       { 

                           AfxMessageBox("Failed To Render The picture!");

                           pPic->Release();

                       }

                       else

                      {

                         AfxMessageBox("Error Loading Picture From Stream!");

                      }

                }

           }

     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值