PicView

void CExImageView::OnDraw(CDC* pDC)
{
 CExImageDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!m_Image.IsNull()) {
  CRect rectWindow;
  GetClientRect(rectWindow);
  CSize sizeImage(m_Image.GetWidth(), m_Image.GetHeight());
  CRect rectShow;
  rectShow = RectSizeWithConstantRatio(&rectWindow, sizeImage, TRUE);
  SetStretchBltMode(pDC->m_hDC, HALFTONE);
  m_Image.Draw(pDC->m_hDC, rectShow);
  //m_Image.Draw(pDC->m_hDC, 0, 0,rectWindow.Width(),rectWindow.Height());
  //CString str;
  //str.Format("%d", rectWindow.Width());
  //AfxMessageBox(str);
  //str.Format("%d", rectWindow.Height());
  //AfxMessageBox(str);
  //SetStretchBltMode(pDC->m_hDC, HALFTONE);
  //m_Image.StretchBlt(pDC->m_hDC, 0,0,rectWindow.Width(),rectWindow.Height(),SRCCOPY);
 }

 

CRect CExImageView::RectSizeWithConstantRatio(CRect* rcScreen,CSize sizePicture,BOOL bCenter)
{
 CRect rect(rcScreen);
 double dWidth = rcScreen->Width();
 double dHeight = rcScreen->Height();
 double dAspectRatio = dWidth/dHeight;

 double dPictureWidth = sizePicture.cx;
 double dPictureHeight = sizePicture.cy;
 double dPictureAspectRatio = dPictureWidth/dPictureHeight;

 //If the aspect ratios are same then the screen rectangle
 // will do, otherwise we need to calculate the new rectangle

 if (dPictureAspectRatio > dAspectRatio)
 {
  int nNewHeight = (int)(dWidth/dPictureWidth*dPictureHeight);
  int nCenteringFactor = (rcScreen->Height() - nNewHeight) / 2;
  rect.SetRect( 0,
   nCenteringFactor,
   (int)dWidth,
   nNewHeight + nCenteringFactor);

 }
 else if (dPictureAspectRatio < dAspectRatio)
 {
  int nNewWidth = (int)(dHeight/dPictureHeight*dPictureWidth);
  int nCenteringFactor = (rcScreen->Width() - nNewWidth) / 2;
  rect.SetRect( nCenteringFactor,
   0,
   nNewWidth + nCenteringFactor,
   (int)(dHeight));
 }

 return rect;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值