2012-10-15 243 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