## CSDN博客

### 如何等比例缩放图像

l         涵数中的第一个参数rcScreen为图像要被显示的矩形大小，第二个参数sizePicture为图像自身大小，第三个参数bCenter为是否居中显示，返回值CRect既为图像最佳显示大小。

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

EMAIL：jingzhou_xu@163.net

0 0