VC将自定义画图区域保存为BMP文件

//引用函数部分

CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("位图文件(*.bmp)|*.bmp|"),NULL);if (dlg.DoModal()!= IDOK) return;CString filename = dlg.GetFileName() + ".bmp";SaveAsBmp(filename);

//保存图形的函数

void CGraDlg::SaveAsBmp(CString filename){//定义图形大小int iWidth = 620;int iHeight = 450; int iPixel = 16;//图形格式参数 LPBITMAPINFO lpbmih = new BITMAPINFO; lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbmih->bmiHeader.biWidth = iWidth; lpbmih->bmiHeader.biHeight = iHeight; lpbmih->bmiHeader.biPlanes = 1; lpbmih->bmiHeader.biBitCount = iPixel; lpbmih->bmiHeader.biCompression = BI_RGB; lpbmih->bmiHeader.biSizeImage = 0; lpbmih->bmiHeader.biXPelsPerMeter = 0; lpbmih->bmiHeader.biYPelsPerMeter = 0; lpbmih->bmiHeader.biClrUsed = 0; lpbmih->bmiHeader.biClrImportant = 0;

//创建位图数据 HDC hdc,hdcMem; HBITMAP hBitMap = NULL; CBitmap *pBitMap = NULL; CDC *pMemDC = NULL; BYTE *pBits;

hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL); hdcMem = CreateCompatibleDC(hdc); hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0); pBitMap = new CBitmap; pBitMap->Attach(hBitMap); pMemDC = new CDC; pMemDC->Attach(hdcMem); pMemDC->SelectObject(pBitMap); //CRect rc(0,0,iWidth,iHeight);pMemDC->SetBkMode(TRANSPARENT); //添加自绘图形 DrawCurve(pMemDC,rc);//Draw2D();

//保存到文件并创建位图结构 BITMAPFILEHEADER bmfh; ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER)); *((char *)&bmfh.bfType) = ‘B’; *(((char *)&bmfh.bfType) + 1) = ‘M’; bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;

// TCHAR szBMPFileName[128]; int iBMPBytes = iWidth * iHeight * iPixel / 8; // strcpy(szBMPFileName,filename); CFile file; if(file.Open(filename,CFile::modeWrite | CFile::modeCreate)) { file.Write(&bmfh,sizeof(BITMAPFILEHEADER)); file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER)); file.Write(pBits,iBMPBytes); file.Close(); }

pMemDC->DeleteDC(); delete pMemDC;pMemDC = NULL; delete pBitMap; pBitMap = NULL; delete lpbmih; lpbmih = NULL;}

void CGraDlg::DrawCurve(CDC *pDC, CRect rcClient){ //页面背景色CBrush brushCtl;brushCtl.CreateSolidBrush(RGB(255,255,205)); pDC->Rectangle(rcClient);pDC->FillRect(rcClient,&brushCtl) ;brushCtl.DeleteObject();

CPen cpen,*pPen;cpen.CreatePen(PS_SOLID,2,RGB(0,0,255));pPen=pDC->SelectObject(&cpen);const int nOrgX=50;//原点const int nOrgY=380;

const int nWidth=500;//坐标轴const int nHeight=320;

int nPI=60;

//指定原点pDC->SetViewportOrg(nOrgX,nOrgY);pDC->SetTextColor(RGB(255,0,0));

//画原点处的突出部分pDC->MoveTo(-8,0);pDC->LineTo(0,0);pDC->MoveTo(0,8);pDC->LineTo(0,0);

//绘制横坐标int n=0,nTmp=0;CString sPIText[30];

CString cTmp;

for(int i=0;i<30;i++){cTmp.Format(_T("%d"),i);sPIText[i] = cTmp;}

while(true){pDC->LineTo(nPI*n,0);//画每一段if(n)pDC->LineTo(nPI*n,-5);//画刻度

pDC->MoveTo(nPI*n,0);

pDC->SetBkMode(TRANSPARENT);pDC->TextOut(nPI*n-sPIText[n].GetLength()*3,10,sPIText[n]);

只有他的好身体,没有地方可去,只想到处流浪、人生就像一场旅行,

VC将自定义画图区域保存为BMP文件

相关文章:

你感兴趣的文章:

标签云: