加载一个图片文件

HBITMAP CListImageCtrl::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); 

 // Create Brushes for Border and BackGround
 HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
 HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));

 // Border Size
 RECT rcBorder;
 rcBorder.left=rcBorder.top=0;
 rcBorder.right=THUMWIDTH;
 rcBorder.bottom=THUMHEIGHT;

 const float fRatio=(float)THUMHEIGHT/THUMWIDTH;

 int XDest, YDest, nDestWidth, nDestHeight;
 // Calculate Rect to fit to canvas
 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);
 // Draw Background
 ::FillRect(hDC, &rcBorder, hBrushBk);

 // Draw Border
 ::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);

   // This call sets up the mask bitmap.
   hdcDst.BitBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,SRCCOPY); 
   //hdcDst.StretchBlt(XDest,YDest,nDestWidth, nDestHeight, &hdcSrc,0,0,48,48,SRCCOPY);

 pOldBitmapImage = (HBITMAP)SelectObject(hdcDst.m_hDC,bm);

 // Release used DC and Object
 DeleteDC(hDC);
 DeleteObject(hBrushBorder);
 DeleteObject(hBrushBk);

    return pOldBitmapImage;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值