MFC加载图片


//加载Jpg、Bmp图片,这个函数是关键代码!!!!!!!
HBITMAP CHelloDialog::LoadPicture(CString mFile)
{
    CString pFSize;
    WCHAR wpath[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, mFile, -1, wpath, MAX_PATH);
    
    IPicture* pPic;
    OleLoadPicturePath(wpath, NULL, NULL, NULL, IID_IPicture,(LPVOID*)&pPic);
    
    if (pPic==NULL) return NULL;
    HBITMAP hPic = NULL;
    pPic->get_Handle((UINT*)&hPic);
    
    long nWidth=THUMWIDTH;
    long nHeight=THUMHEIGHT;
    
    long mWid,mHei;
    pPic->get_Height(&mHei);
    pPic->get_Width(&mWid);
    
    HBITMAP hPicRet = (HBITMAP)CopyImage(hPic, IMAGE_BITMAP, nWidth, nHeight , LR_COPYDELETEORG);    
    
    
    HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
    HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
    
    
    RECT rcBorder;
    rcBorder.left=rcBorder.top=0;
    rcBorder.right=THUMWIDTH;
    rcBorder.bottom=THUMHEIGHT;
    
    const float fRatio=(float)THUMHEIGHT/THUMWIDTH;
    
    int XDest, YDest, nDestWidth, nDestHeight;
    
    const float fImgRatio=(float)mHei/mWid;
    if(fImgRatio > fRatio)
    {
        nDestWidth=(THUMHEIGHT/fImgRatio);
        XDest=(THUMWIDTH-nDestWidth)/2;
        YDest=0;
        nDestHeight=THUMHEIGHT;
    }
    else
    {
        XDest=0;
        nDestWidth=THUMWIDTH;
        nDestHeight=(THUMWIDTH*fImgRatio);
        YDest=(THUMHEIGHT-nDestHeight)/2;
    }
    
    CClientDC cdc(this);
    HDC hDC=::CreateCompatibleDC(cdc.m_hDC);
    HBITMAP bm = CreateCompatibleBitmap(cdc.m_hDC, THUMWIDTH, THUMHEIGHT);
    HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
    ::FillRect(hDC, &rcBorder, hBrushBk);
    ::FrameRect(hDC, &rcBorder, hBrushBorder);
    HBITMAP hBmReturn= (HBITMAP)::SelectObject(hDC, pOldBitmapImage);
    
    CDC hdcSrc, hdcDst;
    
    hdcSrc.CreateCompatibleDC(NULL);
    hdcDst.CreateCompatibleDC(NULL);
    
    // Load the bitmaps into memory DC
    CBitmap* hbmSrcT = (CBitmap*) hdcSrc.SelectObject(hPicRet);
    CBitmap* hbmDstT = (CBitmap*) hdcDst.SelectObject(hBmReturn);
    
    hdcDst.BitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,SRCCOPY);    
    pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm);
    
    DeleteDC(hDC);
    DeleteObject(hBrushBorder);
    DeleteObject(hBrushBk);
    
    return pOldBitmapImage;
}

//在加载函数中添加代码:

 if( m_bmp.m_hObject != NULL )//判断
  m_bmp.DeleteObject();
 /载入图片 
 HBITMAP hbmp=LoadPicture( "e:\\pictrue.*");

m_bmp.Attach( hbmp );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值