图片操作

 CStatic m_bmp; 
 CString m_strSourceFile;
 CRect rect1;

IStream *pStm;
    CFileStatus fstatus;
    CFile file;
    LONG cb;
 
 CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  "Jpeg Files (*.jpg;*.jpeg)|*.jpg; *.jpeg|", NULL);
 if (dlg.DoModal() == IDOK)
 {
  m_strSourceFile = dlg.GetPathName();
  if (file.Open(m_strSourceFile,CFile::modeRead)&&file.GetStatus(m_strSourceFile,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.ReadHuge(pvData, cb);
     GlobalUnlock(hGlobal);
     CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
    }
   }
  }
  else
  {
   return;
  }
  //??ê?í???
  IPicture *pPic;
  CoInitialize(NULL);
  CDC* pDC = m_bmp.GetDC();    //??μ???ê????tμ?DC
  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);
   //get image position
   m_bmp.GetWindowRect(&rect1);
   //use render function display image  
   if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
   {   
    pPic->Release();   
    return;   
   }  
   pPic->Release();   
  }  
  else   
  {  
   return;
  }
  CoUninitialize();
  return; 
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值