设为首页 加入收藏

TOP

VC中如何等比例缩放图像
2014-11-23 20:10:49 】 浏览:9052
Tags:何等 比例 缩放 图像

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

  涵数中的第一个参数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++环境下菜单和工具栏的动态修.. 下一篇VC 处 理 ACCESS 中 的 位 图 数 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目