VC开发灰度位图处理.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC开发灰度位图处理

Visual C++6.0开发灰度位图处理 9/10/2001 9:41:14· 图像处理技术已经类生活的各个领域并得到越来越多的应用,图像处理所涉及的图像格式有很多种,如TIF、JEMP、BMP等等,工程应用中经常要处理256级的灰度BMP图像,如通过黑白采集卡采集得到的图像。BMP灰度图像作为Windows环境下主要的图像格式之一,以其格式简单,适应性强而倍受欢迎。在进行图像处理时,操作图像中的像素值就要得到图像阵列;经过处理后的图像的像素值存储起来;显示图像时要正确实现调色板,结合这些问题,文章针对性的给出了操作灰度BMP图像时的部分函数实现代码及注释。   一、 BMP位图操作   BMP位图包括位图文件头结构BITMAPFILEHEADER、位图信息头结构BITMAPINFOHEADER、位图颜色表RGBQUAD和位图像素数据四部分。处理位图时要根据文件的这些结构得到位图文件大小、位图的宽、高、实现调色板、得到位图像素值等等。对于256级灰度图像每个像素用8bit表示颜色的索引值,这里要注意的一点是在BMP位图中,位图的每行像素值要填充到一个四字节边界,即位图每行所占的存储长度为四字节的倍数,不足时将多余位用0填充。   在处理图像应用程序的文档类(CdibDoc.h)中声明如下宏及公有变量:   #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行象素所占的字节数目   HANDLE m_hDIB;//存放位图数据的句柄   CPalette* m_palDIB;//指向调色板Cpalette类的指针   CSize m_sizeDoc; file://初始化视图的尺寸   1、 读取灰度BMP位图   根据BMP位图文件的结构,操作BMP位图文件读入数据,重载了文挡类的OnOpenDocument函数如下: BOOL CDibDoc::OnOpenDocument(LPCTSTR lpszPathName) {  CFile file;  CFileException fe;  if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, fe))  {   AfxMessageBox(文件打不开);   return FALSE;   }//打开文件  DeleteContents();//删除文挡  BeginWaitCursor();  BITMAPFILEHEADER bmfHeader;//定义位图文件头结构  DWORD dwBitsSize;  HANDLE hDIB;  LPSTR pDIB;  BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针  dwBitsSize = file.GetLength();//得到文件长度  if (file.Read((LPSTR)bmfHeader, sizeof(bmfHeader)) !=              sizeof(bmfHeader))   return FALSE;   if (bmfHeader.bfType != 0x4d42) file://检查是否为BMP文件    return FALSE;    hDIB=(HANDLE) ::GlobalAlloc(GMEM_MOVEABLE |                  GMEM_ZEROINIT, dwBitsSize);    file://申请缓冲区    if (hDIB == 0)    {     return FALSE;    }    pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);    file://得到申请的缓冲区的指针    if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=      dwBitsSize - sizeof(BITMAPFILEHEADER) )    {     ::GlobalUnlock((HGLOBAL)hDIB);     hDIB=NULL;     return FALSE;     }//读数据,包括位图信息、位图颜色表、图像像素的灰度值    bmhdr=(BITMAPINFOHEADER*)pDIB;//为指向位图信息头结构的指针付值    ::GlobalUnlock((HGLOBAL)hDIB);    if ((*bmhdr).biBitCount!=8) file://验证是否为8bit位图     ret

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档