热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

VC中如何等比例缩放图像

发布时间:2010-10-21 11:36文章来源:网络文章作者:秩名 点击次数:
摘要:在放大或缩小图像时,如何能最好的保持图像原态比例来显示呢?下面提供一个涵数可帮你来实现,调用它后,返回的矩形区域既为最佳显示图像大...

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

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

  };

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

  {

  ……(部分省略)

  //得到屏幕大小

  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中在界面上实现3D文字效果