我想把图片中各个像素的颜色填充到对应的矩形中,用下面的代码中实现,但是没有成功,出现标题所说的错误,大家帮我找找原因或者提提意见,怎么实现更方便。 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();
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();
bitmap不是个局部的,那么
bitmap->Attach(hBitmap);是不是执行了多次?这样导致断言错误
这些代码是OnOpenFile里的,他的参数就是这个lpszPathName,应该是成功的吧!
我看你都bitmap->Detach();了,为什么下面还会用到bitmap:memDC.SelectObject(bitmap);呢?
int err=GetLastError();
看err值是多少?