Stretchblt缩放位图问题
在VC中,一般用stretchblt函数对位图进行缩放,但我发现当一副很大的位图缩小时,有些像素丢失。
我的代码如下:
void CMainFrame::OnPaint()
{
//CPaintDC dc(this); // device context for painting
CDC dc, memdc;
dc.m_hDC=::GetDC(this-> m_hWndMDIClient);
CRect rect;
CBitmap bitmap;
BITMAP szbitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
bitmap.GetObject(sizeof(BITMAP), &szbitmap);
CSize size(szbitmap.bmWidth, szbitmap.bmHeight);
memdc.CreateCompatibleDC(&dc);
CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
//GetClientRect(&rect);
FromHandle(m_hWndMDIClient)-> GetClientRect(&rect);
StretchBlt(dc.m_hDC, 0, 0, rect.Width(), rect.Height(),
memdc.m_hDC, 0, 0, size.cx, size.cy, SRCCOPY);
memdc.SelectObject(oldbitmap);
memdc.DeleteDC();
dc.DeleteDC();
CMDIFrameWnd::OnPaint();
}
当调整框架的大小,使窗口变的很小(比这个位图小很多)时,位图上的有些像素会丢失,有点花的感觉!
问题何在呢?
[解决办法]
你不会是先缩小,再用缩小的图来放大,这样的话当然会失真啊,你要在内存DC里放好原来的图,放大和缩小都对原图进行,这样就看起来好多了~~~~`
[解决办法]
试试这样,看看是否有改善?
int i = SetStretchBltMode(hDcDest, HALFTONE);
StretchBlt(hDcDest, 0, 0, m_pWndInfo-> GetWidth(), m_pWndInfo-> GetHeight(), hDC, 0, 0, nWidth, nHeight, SRCCOPY);
SetStretchBltMode(hDcDest, i);
[解决办法]
你不嫌麻烦的话就用 MeteFile
失真在所难免
[解决办法]
缩小也有失真吗?
++++++++++++++++++
缩小怎么可能不失真?