有关位图拉伸的问题!急!

yaonb 2002-12-11 10:58:55
我用StretchBlt拉伸在资源文件中定义的位图,为什么显示出来的是黑块呢?

还有别的办法吗?
...全文
60 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whz_time 2002-12-11
  • 打赏
  • 举报
回复
#define UN_CHAR unsigned char
#if (X_MAX!=352) && (Y_MAX!=240)
#define X_MAX 352
#define Y_MAX 240
#endif

BOOL CBmpFile::ConvertBmpSize(int nWidth/* = X_MAX*/,int nHeight /*= Y_MAX*/)
{
/*
Convert width of bitmap to nWidth and heihgt of bitmap to nHeight
if it succeeds return TRUE,oherwith retrun FALSE

*/
if(NULL == m_hBitmap)
return FALSE;

HWND hWnd = ::GetDesktopWindow();
ASSERT(hWnd);
CWnd wnd;
if(!wnd.Attach(hWnd))
return FALSE;
CWindowDC winDC(&wnd);

//Create a new bitmap and initialize it
CBitmap newBmp;
if(!newBmp.CreateCompatibleBitmap(&winDC,nWidth,nHeight))
{
wnd.Detach();
return FALSE;
}
CDC memDC;
if(!memDC.CreateCompatibleDC(&winDC))
{
wnd.Detach();
return FALSE;
}
CBitmap *pOldNewBmp = memDC.SelectObject(&newBmp);
CBrush brush(RGB(255,255,255));
CRect rect(0, 0, nHeight,nWidth);
memDC.FillRect(rect, &brush);

//get pointer of bitmap in the memory
CBitmap *pThisBitmap=NULL;
pThisBitmap = CBitmap::FromHandle(GetSafeHandle());
CDC ThisMemDC;
if(!ThisMemDC.CreateCompatibleDC(&memDC))
{
wnd.Detach();
return FALSE;
}
CBitmap *pOldBmp = ThisMemDC.SelectObject(pThisBitmap);

//convert bitmap;
memDC.SetStretchBltMode(HALFTONE);
// memDC.SetStretchBltMode(STRETCH_DELETESCANS);
// memDC.BitBlt(0,0,X_MAX,Y_MAX,&ThisMemDC,0,0,SRCCOPY);
if(!memDC.StretchBlt(0,0, nWidth,nHeight,
&ThisMemDC, 0, 0,GetWidth(),GetHeight(), SRCCOPY))
{
wnd.Detach();
return FALSE;
}


ThisMemDC.SelectObject(pOldBmp);

memDC.SelectObject(pOldNewBmp);

//save bitmap to object
DeleteObject();
if(!SetBitmap((HBITMAP)newBmp))
{
wnd.Detach();
return FALSE;
}
wnd.Detach();
return TRUE;
}
foxmail 2002-12-11
  • 打赏
  • 举报
回复
读入到内存dc了吗?创建目标dc了吗,目标dc大小足够吗,源代码贴出来看看
romanticist 2002-12-11
  • 打赏
  • 举报
回复
用CopyImage,然后用BitBlt显示

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧