作者:徐景周
在放大或縮小圖像時,如何能最好的保持圖像原態(tài)比例來顯示呢?下面提供一個涵數(shù)可幫你來實現(xiàn),調用它后,返回的矩形區(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)
|