明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

如何等比例縮放圖像

[摘要]作者:徐景周在放大或縮小圖像時,如何能最好的保持圖像原態(tài)比例來顯示呢?下面提供一個涵數(shù)可幫你來實現(xiàn),調(diào)用它后,返回的矩形區(qū)域既為最佳顯示圖像大小。l 涵數(shù)中的第一個參數(shù)rcScreen為圖像要被顯示的矩形大小,第二個參數(shù)sizePicture為圖像自身大小,第三個參數(shù)bCenter...
作者:徐景周

在放大或縮小圖像時,如何能最好的保持圖像原態(tài)比例來顯示呢?下面提供一個涵數(shù)可幫你來實現(xiàn),調(diào)用它后,返回的矩形區(qū)域既為最佳顯示圖像大小。

l         涵數(shù)中的第一個參數(shù)rcScreen為圖像要被顯示的矩形大小,第二個參數(shù)sizePicture為圖像自身大小,第三個參數(shù)bCenter為是否居中顯示,返回值CRect既為圖像最佳顯示大小。

涵數(shù)如下所示:

CRect 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 the 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;
};


聯(lián)系方式:

EMAIL:jingzhou_xu@163.net

未來工作室(Future Studio)


標(biāo)簽:如何等比例縮放圖像