VC++数字图像处理编程(11)

时间:2025-04-30

2、 灰度位图数据的存储

为了将图像处理后所得到的像素值保存起来,我们重载了文档类的

OnSaveDocument()函数,这样用户在点击Save或SaveAs子菜单后程序自动调用该函数,实现图像数据的存储。该函数的具体实现如下:

/////////////////////////////////////////////////////////////////// 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("文件打不开");

return FALSE;

}//以读写的方式打开文件;

BOOL bSuccess = FALSE;

BeginWaitCursor();

lpBI = (LPBITMAPINFOHEADER) ::GlobalLock((HGLOBAL) m_hDIB);

if (lpBI == NULL)

return FALSE;

dwDIBSize = *(LPDWORD)lpBI + 256*sizeof(RGBQUAD);

//图像的文件信息所占用的字节数;

DWORD dwBmBitsSize;//BMP文件中位图的像素所占的字节数

dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount)) *lpBI->biHeight;// 存储时位图所有像素所占的总字节数

dwDIBSize += dwBmBitsSize; //BMP文件除文件信息结构外的所有数据占用的总字节数;

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

VC++数字图像处理编程(11).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219