【问题标题】:Saving a large-size picture in a small-size window在小尺寸窗口中保存大尺寸图片
【发布时间】:2012-10-15 10:34:09
【问题描述】:

我是 MFC 的新手。现在我有以下问题: 我有一张大尺寸的图片(例如 2000*2000 的尺寸)显示在一个小尺寸的窗口中(例如 640*480 的尺寸)。难怪如果不缩小图片就无法完全展示自己。我知道如果图片可以放入窗口,我可以保存原始图片而不会丢失任何像素,但是,我目前不能这样做:

CClientDC SHDC(this); //"this" is a CMDIChildWnd derived class
CDC memDC;
CRect rect;

GetClientRect(&rect);
memDC.CreateCompatibleDC(&SHDC);
CBitmap bm;
int uWidth = rect.Width();
int uHeight = rect.Height();
bm.CreateCompatibleBitmap(&SHDC, uWidth, uHeight);
CBitmap *pOld = memDC.SelectObject(&bm);
memDC.BitBlt(0, 0, uWidth, uHeight, &SHDC, 0, 0, SRCCOPY);
......

保存的图片只显示客户区,但我想保存所有的图片。 谁能帮助我?提前致谢。

习

【问题讨论】:

  • 你是问如何实现滚动?

标签: c++ mfc


【解决方案1】:

试试StretchBlt,而不是BitBlt。它会为你处理收缩。

StretchBlt 函数将位图从源矩形复制到 目标矩形,拉伸或压缩位图以适应 目标矩形的尺寸(如有必要)。系统 根据拉伸模式拉伸或压缩位图 当前在目标设备上下文中设置。

如果您想要更高质量的拉伸/收缩,请查看 GDI+。您可以使用多种插值模式。更多信息在这里:

http://msdn.microsoft.com/en-us/library/k0fsyd4e.aspx

【讨论】:

  • 谢谢,但这对我不起作用。我只想要原始图片(在示例中为 2000*2000 像素的图片)。刚刚有人告诉我,世界上没有办法做到这一点,是吗?
  • 您是想缩小图片以适应较小的窗口还是其他的东西?
  • 我试过这个方法,它实际上返回了一个原始大小的图片。但它会导致质量下降 - 图片变得模糊。这对我来说可能是一个选择。但是还有其他更好的解决方案吗?
  • @XiDuan,如果你使用GDI+,你应该指定HighQualityBicubic作为调整模式。
猜你喜欢
  • 2023-03-13
  • 2014-03-17
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多