打开图片的时候出现ASSERT(m_hObject == NULL)

zjut018 2011-04-28 03:41:08
我想把图片中各个像素的颜色填充到对应的矩形中,用下面的代码中实现,但是没有成功,出现标题所说的错误,大家帮我找找原因或者提提意见,怎么实现更方便。

CClientDC aDC(this);
OnPrepareDC(&aDC);
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,lpszPathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
bitmap->Attach(hBitmap);
BITMAP BMP;
bitmap->GetBitmap(&BMP);
bitmap->Detach();
CDC memDC;
memDC.CreateCompatibleDC(&aDC);
bitmap->CreateCompatibleBitmap(&aDC,BMP.bmWidth,BMP.bmHeight);
CBitmap* pOldBitmap=memDC.SelectObject(bitmap);
COLORREF m_Color;
CRect rc;
CBrush brush;
for(int i=0;i<BMP.bmWidth;i++)
for(int j=0;j<BMP.bmHeight;j++)
{
m_Color=memDC.GetPixel(i,j);
rc.left=i*Width;
rc.top=j*Width;
rc.right=rc.left+Width;
rc.bottom=rc.top+Width;
brush.CreateSolidBrush(m_Color);
CBrush* pOldBrush=aDC.SelectObject(&brush);
aDC.FillRect(rc,&brush);
aDC.SelectObject(pOldBrush);
}
memDC.SelectObject(pOldBitmap);
memDC.DeleteDC();
...全文
300 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉默的一个人 2011-09-27
  • 打赏
  • 举报
回复
应该是你变量是局部还是全局
zjut018 2011-04-30
  • 打赏
  • 举报
回复
来个好心人给支个招,不管是Loadimage还是file Open Read 以后CreateDIBSection得到的位图句柄都显示是unused。是vc2010的关系吗?还是其他,还有没有其他方法获得位图文件的句柄!
zjut018 2011-04-29
  • 打赏
  • 举报
回复
这个值是0,这个有用吗?反正执行到这的时候我看hBitmap在局部变量那是红色的,点开是unused
zjut018 2011-04-29
  • 打赏
  • 举报
回复
有好心人回答下嘛,我这个DIB位图怎么读才能正确读出来!
HowToP2p 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zjut018 的回复:]
这函数没用过咋用啊!!
[/Quote]
在LoadImage后面
int err=GetLastError();
看err值是多少?
zjut018 2011-04-28
  • 打赏
  • 举报
回复
这函数没用过咋用啊!!
HowToP2p 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zjut018 的回复:]
在这个bitmap->Attach(hBitmap)之后出现ASSERT,但断点在这句的时候hBitmap好像没有加载成功,要怎么办才好!!
[/Quote]
那就是说hBitmap为空?那在LoadImage后面调用GetLastError看返回多少?
zjut018 2011-04-28
  • 打赏
  • 举报
回复
bitmap->Detach();这个放后面也没成功!
zjut018 2011-04-28
  • 打赏
  • 举报
回复
在这个bitmap->Attach(hBitmap)之后出现ASSERT,但断点在这句的时候hBitmap好像没有加载成功,要怎么办才好!!
pop1210 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zjut018 的回复:]
引用 5 楼 howtop2p 的回复:
引用 4 楼 zjut018 的回复:
引用 2 楼 howtop2p 的回复:
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误

我把这个bitmap弄成全局的出现这个错误,局部的也出现这个错误!

你调试下看断言错误定位在哪?另外你这段代码放在哪里……
[/Quote]
但是标题上的那句Assert(...);不是你写的吧,你写的代码断在了哪里?
我看你都bitmap->Detach();了,为什么下面还会用到bitmap:memDC.SelectObject(bitmap);呢?
HowToP2p 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zjut018 的回复:]
引用 5 楼 howtop2p 的回复:
引用 4 楼 zjut018 的回复:
引用 2 楼 howtop2p 的回复:
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误

我把这个bitmap弄成全局的出现这个错误,局部的也出现这个错误!

你调试下看断言错误定位在哪?另外你这段代码放在哪里……
[/Quote]
我是说你设断点单步执行,看执行到哪一句就弹出这个ASSERT,比如是Attach这句,那就是这里的问题,再作分析
zjut018 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 howtop2p 的回复:]
引用 4 楼 zjut018 的回复:
引用 2 楼 howtop2p 的回复:
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误

我把这个bitmap弄成全局的出现这个错误,局部的也出现这个错误!

你调试下看断言错误定位在哪?另外你这段代码放在哪里?
[/Quote]
就是定位在标题说的地方,代码放在楼上说地方了!
HowToP2p 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zjut018 的回复:]
引用 2 楼 howtop2p 的回复:
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误

我把这个bitmap弄成全局的出现这个错误,局部的也出现这个错误!
[/Quote]
你调试下看断言错误定位在哪?另外你这段代码放在哪里?
zjut018 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 howtop2p 的回复:]
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误
[/Quote]
我把这个bitmap弄成全局的出现这个错误,局部的也出现这个错误!
zjut018 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,lpszPathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

这里LoadImage成功?
[/Quote]
我是用对话框打开的,OnOpenFile(dlg.GetPathName())
这些代码是OnOpenFile里的,他的参数就是这个lpszPathName,应该是成功的吧!
HowToP2p 2011-04-28
  • 打赏
  • 举报
回复
你这段放在哪里的?
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误
Eleven 2011-04-28
  • 打赏
  • 举报
回复
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,lpszPathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

这里LoadImage成功?

19,468

社区成员

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

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