-

- 加为好友
- 发送私信
- 在线聊天
-
jiaqt
- 等级:

- 可用分等级:
- 总技术分:
- 总技术分排名:
- 结帖率:
|
| 发表于:2008-05-14 15:52:18 楼主 |
如题,想保存一个窗口图像到bmp,从网上参考别人一段,但执行起来,经常出错,检查发现可能是DC没有释放,加上后,还是异常,请高手指点一下,感谢~!~! CDC *pDC; CRect rect; CStatic *pCurve=(CStatic *)GetDlgItem(IDC_STATIC_CURVE);//保存曲线的窗口 if(pCurve==NULL) return; pCurve->GetClientRect(&rect); pDC=(CDC *)pCurve->GetDC(); CDC dc; dc.CreateDC("DISPLAY",NULL,NULL,NULL); //dc.CreateCompatibleDC(pDC); //rect.bottom+=15; //调整图像 //rect.right+=15; CBitmap bm; bm.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height()); //定义bmp图像的宽阔,高 CDC tdc; tdc.CreateCompatibleDC(&dc); CBitmap*pOld=tdc.SelectObject(&bm); //tdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,rect.left,rect.top,SRCCOPY); tdc.BitBlt(0,0,rect.Width(),rect.Height(),&dc,10,50,SRCCOPY); tdc.SelectObject(pOld); BITMAP btm; bm.GetBitmap(&btm); DWORD size=btm.bmWidthBytes*btm.bmHeight; //LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size); LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size); BITMAPINFOHEADER bih; bih.biBitCount=btm.bmBitsPixel; bih.biClrImportant=0; bih.biClrUsed=0; bih.biCompression=0; bih.biHeight=btm.bmHeight; bih.biPlanes=1; bih.biSize=sizeof(BITMAPINFOHEADER); bih.biSizeImage=size; bih.biWidth=btm.bmWidth; bih.biXPelsPerMeter=0; bih.biYPelsPerMeter=0; GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); BITMAPFILEHEADER bfh; bfh.bfReserved1=bfh.bfReserved2=0; bfh.bfType=((WORD)('M' < < 8)|'B'); bfh.bfSize=54+size; bfh.bfOffBits=54; CString strFilter = "BMP Files (*.bmp)|*.bmp|"; CString m_wszFileName;//=m_FileName.Left(m_FileName.GetLength()-4)+".bmp";//"CopyScreen.bmp"; CFileDialog dlgSave(FALSE, ".bmp", m_wszFileName, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, strFilter); if (dlgSave.DoModal() == IDCANCEL) return ; m_wszFileName = dlgSave.GetPathName(); CFile bf; if(bf.Open(m_wszFileName,CFile::modeCreate|CFile::modeWrite)) { bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER)); bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER)); bf.WriteHuge(lpData,size); bf.Close(); } GlobalFree(lpData); //****************原来到这里后面,我加上了释放DC,但还是异常**************************** //pDC->DeleteDC(); pCurve->ReleaseDC(pDC); dc.DeleteDC(); tdc.DeleteDC(); |
|
|
|
20
修改
删除
举报
引用
回复
| |