2012-10-15 192 views
0

我是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); 
...... 

保存的图片仅显示客户端区域,但我会想要保存所有的图片。 任何人都可以帮助我?提前致谢。

+0

你问如何实现滚动? –

回答

2

而不是BitBlt尝试StretchBlt。它会处理你的萎缩。

StretchBlt函数拷贝从源矩形的位图成 目标矩形,拉伸或压缩位图以适应目标矩形的尺寸 ,如果必要的话。系统 根据当前在目标设备上下文中设置的拉伸模式 拉伸或压缩位图。

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

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

+0

谢谢,但那不适合我。我只是想要原始的图片(在这个例子中,2000 * 2000像素的图片)。有人告诉我没有办法在地球上实现这个目标,是吗? –

+1

再试一次。这是正确的答案。 – l33t

+0

你想缩小图片以适应更小的窗口或不同的东西吗? – snowdude