首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Stretchblt缩放位图有关问题

2012-01-31 
Stretchblt缩放位图问题在VC中,一般用stretchblt函数对位图进行缩放,但我发现当一副很大的位图缩小时,有些

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
失真在所难免
[解决办法]
缩小也有失真吗?

++++++++++++++++++
缩小怎么可能不失真?

热点排行