NO IMAGE

文章來源:http://tech.ddvip.com/2008-11/122664875992689.html

演示程式:http://download.csdn.net/detail/daiafei/4317907

在放大或縮小影象時,如何能最好的保持影象原態比例來顯示呢?下面提供一個涵數可幫你來實現,呼叫它後,返回的矩形區域既為最佳顯示影象大小。

  涵數中的第一個引數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;
};