vc++显示一张JPG图片

bool CshowjpgDlg::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 = nullptr;

    //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;
}

2.调用
 CDC* pDC = GetDlgItem(IDC_PICTRUE11)->GetDC();
 ShowJpgGif(pDC,_T("d.jpg"),0,0);

转载于:https://www.cnblogs.com/ouyangyuxi/p/4994085.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值