设为首页 加入收藏

TOP

VC实现自绘图形输出到bmp(一)
2013-04-24 12:10:46 】 浏览:752
Tags:实现 图形 输出 bmp

  在用vc做程序时候,经常需要把输出的文本和图形保存到位图文件,当然可以 有现成的控件来实现,但总不能如自己所愿,还是自己动手写吧!如下图:

  一、实现方法

  要把文本和图形保存到位图文件,只要对掌握位图结构有一定的了解,一切都 ok呢。先必须要创建内存设备环境,然后内存设备环境创建的DIB区域,别忘了还 要创建个CBitmap对象,CBitmap对象必须和DIB区域关联起来,把CBitmap对象选 择到当前设备环境,然后在当前设备环境输出文本和图形就可以了。

  二、具体实现代码如下

  void CTestSaveBmpView::SaveAsBmp(CString filename)

  {

  //定义图形大小

  int iWidth = 800;

  int iHeight = 600;

  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);

  //保存到文件并创建位图结构

  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(szBMPFileName,CFile::modeWrite | CFile::modeCreate))

  {

   

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC和MFC的一些常见问题 下一篇VC获取物理网卡的MAC地址

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目