我想把图片中各个像素的颜色填充到对应的矩形中,用下面的代码中实现,但是没有成功,出现标题所说的错误,大家帮我找找原因或者提提意见,怎么实现更方便。         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();

解决方案 »

  1.   

    HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,lpszPathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);这里LoadImage成功?
      

  2.   

    你这段放在哪里的?
    bitmap不是个局部的,那么
    bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误
      

  3.   

    我是用对话框打开的,OnOpenFile(dlg.GetPathName())
    这些代码是OnOpenFile里的,他的参数就是这个lpszPathName,应该是成功的吧!
      

  4.   

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

  5.   

    我是说你设断点单步执行,看执行到哪一句就弹出这个ASSERT,比如是Attach这句,那就是这里的问题,再作分析
      

  6.   

    但是标题上的那句Assert(...);不是你写的吧,你写的代码断在了哪里?
    我看你都bitmap->Detach();了,为什么下面还会用到bitmap:memDC.SelectObject(bitmap);呢?
      

  7.   

    在这个bitmap->Attach(hBitmap)之后出现ASSERT,但断点在这句的时候hBitmap好像没有加载成功,要怎么办才好!!
      

  8.   

    bitmap->Detach();这个放后面也没成功!
      

  9.   

    那就是说hBitmap为空?那在LoadImage后面调用GetLastError看返回多少?
      

  10.   

    在LoadImage后面
    int err=GetLastError();
    看err值是多少?
      

  11.   

    这个值是0,这个有用吗?反正执行到这的时候我看hBitmap在局部变量那是红色的,点开是unused
      

  12.   

    有好心人回答下嘛,我这个DIB位图怎么读才能正确读出来!
      

  13.   

    来个好心人给支个招,不管是Loadimage还是file Open Read 以后CreateDIBSection得到的位图句柄都显示是unused。是vc2010的关系吗?还是其他,还有没有其他方法获得位图文件的句柄!