当前位置:编程学习 > VC++ >>

VC中如何等比例缩放图像

 

 

  在放大或缩小图像时,如何能最好的保持图像原态比例来显示呢?下面提供一个涵数可帮你来实现,调用它后,返回的矩形区域既为最佳显示图像大小。

  涵数中的第一个参数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;

};

? 此涵数的使用方法如下:

{

……(部分省略)

//得到屏幕大小

CRect rcScreen( 0, 0,

GetSystemMetrics(SM_CXSCREEN),

GetSystemMetrics(SM_CYSCREEN));

 

//得到图像尺寸

CSize sizePicture(picture.m_Width, picture.m_Height);

 

CRect rcNewPictureRect =

SizeRectWithConstantAspectRatio(&rcScreen,

sizePicture,

TRUE);

picture.Show(&dc, rcNewPictureRect);

}

 

 

 

 

 

补充:软件开发 , Vc ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,