Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在小窗口中保存大尺寸图片_C++_Mfc - Fatal编程技术网

C++ 在小窗口中保存大尺寸图片

C++ 在小窗口中保存大尺寸图片,c++,mfc,C++,Mfc,我是MFC的新手。现在我有一个问题: 我在小窗口(例如640*480)中显示大尺寸图片(例如2000*2000)。难怪这幅画不缩小就不能完全显示出来。我知道如果图片可以放入窗口,我可以保存原始图片而不丢失任何像素,但是,我现在无法执行此操作: CClientDC SHDC(this); //"this" is a CMDIChildWnd derived class CDC memDC; CRect rect; GetClientRect(&rect); memDC.CreateCom

我是MFC的新手。现在我有一个问题: 我在小窗口(例如640*480)中显示大尺寸图片(例如2000*2000)。难怪这幅画不缩小就不能完全显示出来。我知道如果图片可以放入窗口,我可以保存原始图片而不丢失任何像素,但是,我现在无法执行此操作:

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);
......
保存的图片只显示客户端区域,但我想保存所有图片。 有人能帮我吗?提前谢谢


Xi

代替
BitBlt
尝试
StretchBlt
。它会帮你处理缩水的问题

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

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


谢谢,但这对我不起作用。我只想要原始的pict(在本例中,是2000*2000像素的图片)。有人告诉我,在地球上没有办法做到这一点,是吗?你是想缩小图片以适应更小的窗口还是其他什么?我尝试了这种方法,它实际上返回了一张原始大小的图片。但它会导致质量下降——图片变得模糊。这可能是我的一个选择。但是还有其他更好的解决方案吗?@XiDuan,如果你使用GDI+,你应该为大小调整模式指定
HighQualityBicubic
。你是在问如何实现滚动吗?