AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

Visual C++6.0开发灰度位图处理

51自学网 2015-08-30 http://www.wanshiok.com

  2、 灰度位图数据的存储

  为了将图像处理后所得到的像素值保存起来,重载了文档类的OnSaveDocument函数,其具体实现如下:

BOOL CDibDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
 CFile file;
 CFileException fe;
 BITMAPFILEHEADER bmfHdr; // 位图文件头结构
 LPBITMAPINFOHEADER lpBI; //指向位图信息结构的指针
 DWORD dwDIBSize;
 if (!file.Open(lpszPathName, CFile::modeCreate |
   CFile::modeReadWrite | CFile::shareExclusive, &fe))
 {
  AfxMessageBox("文件打不开");
 }//打开文件
 BOOL bSuccess = FALSE;
 BeginWaitCursor();
 lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) m_hDIB);
 if (lpBI == NULL)
  return FALSE;
  dwDIBSize = *(LPDWORD)lpBI + 256*sizeof(RGBQUAD);
   // Partial Calculation
  DWORD dwBmBitsSize;//BMP文件信息结构所占的字节数
  dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))  *lpBI->biHeight;// 存储时位图所有像素所占的总字节数
  dwDIBSize += dwBmBitsSize;
  lpBI->biSizeImage = dwBmBitsSize; // 位图所有像素所占的总字节数
  //以下五句为文件头结构填充值
  bmfHdr.bfType =0x4d42; // 文件为"BMP"类型
  bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);//文件总长度
  bmfHdr.bfReserved1 = 0;
  bmfHdr.bfReserved2 = 0;
  bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + lpBI->biSize
            + 256*sizeof(RGBQUAD);
  //位图数据距问件头的偏移量
  file.Write((LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER));//写文件头
  file.WriteHuge(lpBI, dwDIBSize);
  //将位图信息(信息头结构、颜色表、像素数据)写入文件
  ::GlobalUnlock((HGLOBAL) m_hDIB);
  EndWaitCursor();
  SetModifiedFlag(FALSE); // back to unmodified
  return TRUE;
 }

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:用渐变色填充背景  下一篇:VC中利用ADO共同实现数据库的操作