0

私は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);
......

保存された画像にはクライアント領域のみが表示されますが、すべての画像を保存したいと考えています。誰でも私を助けることができますか?前もって感謝します。

西

4

1 に答える 1

2

BitBlt試してみる代わりにStretchBlt。それはあなたのために縮小を処理します。

StretchBlt 関数は、ビットマップをコピー元の四角形からコピー先の四角形にコピーし、必要に応じてコピー先の四角形のサイズに合わせてビットマップを伸縮または圧縮します。システムは、宛先デバイス コンテキストで現在設定されているストレッチ モードに従って、ビットマップをストレッチまたは圧縮します。

より高品質のストレッチ/シュリンクが必要な場合は、GDI+ をご覧ください。使用できるさまざまな補間モードがあります。詳細はこちら:

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

于 2012-10-15T12:23:17.040 に答える