3,881
社区成员
发帖
与我相关
我的任务
分享
if (m_hBitmap==NULL)
return;
CRect rect;
rect.left=50;
rect.top=50;
rect.right=150;
rect.bottom=100;
int iWidth=rect.Width();
int iHeight=rect.Height();
int iBitCounts=8;
DWORD dwSize=iWidth*iHeight*iBitCounts/8;
BYTE* pNewImageBuffer=new BYTE[dwSize];
BITMAP bm;
::GetObject(m_hBitmap,sizeof(bm),(LPVOID)&bm);
m_bmWidth=bm.bmWidth;
m_bmHeight=bm.bmHeight;
BYTE* pOldImageBuffer=(BYTE*)(bm.bmBits);
int iWidthBytes=bm.bmWidthBytes;
BYTE* pNew=(BYTE*)pNewImageBuffer;
BYTE* pOld=(BYTE*)pOldImageBuffer;
pOld+=(bm.bmHeight-rect.bottom-1)*bm.bmWidthBytes;
for (int i=rect.bottom;i>=rect.top;i--)
{
for (int j=rect.left;j<=rect.right;j++)
{
*pNew=*(pOld+j);
pNew++;
}
if (i>rect.top)
pOld+=bm.bmWidthBytes;
}
CBitmap newBmp;
newBmp.CreateBitmap(iWidth,iHeight,1,iBitCounts,(void*)pNewImageBuffer);//到这里不管换成什么代码,只要涉及到new,即动态分配内存的,都会出现out of memory的那个对话框
CDC* pDC=m_picCtrl.GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CRect clientRect;
m_picCtrl.GetClientRect(clientRect);
CBitmap* pOldBitmap=MemDC.SelectObject(&newBmp);
pDC->BitBlt(100,100,clientRect.Width(),clientRect.Height(),&MemDC,0,0,SRCCOPY);//绘制位图
MemDC.SelectObject(pOldBitmap);
DeleteObject(newBmp);
ReleaseDC(&MemDC);
delete pNewImageBuffer;