如何等比例縮放圖像
發(fā)表時間:2024-02-16 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]作者:徐景周在放大或縮小圖像時,如何能最好的保持圖像原態(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)