BPM图像读取C++程序.doc

BPM图像读取C++程序.doc

ID:57645914

大小:42.50 KB

页数:6页

时间:2020-08-30

BPM图像读取C++程序.doc_第1页
BPM图像读取C++程序.doc_第2页
BPM图像读取C++程序.doc_第3页
BPM图像读取C++程序.doc_第4页
BPM图像读取C++程序.doc_第5页
资源描述:

《BPM图像读取C++程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、#include"StdAfx.h"#include"RWBMPImg.h"CRWBMPImg::CRWBMPImg(void){}CRWBMPImg::~CRWBMPImg(void){}////////////////////////////////////////////////读取BMP图像BOOLCRWBMPImg::ReadBMPFile(constchar*filename,BYTEImg*pbuf){inti,j,addr,nbit;intbmpwidth,bmpheight;BITMAPFILEHEA

2、DERbmfh;//defineBMPfileheadBITMAPINFOHEADERbmih;//defineBMPinformationheadif(pbuf==NULL){MessageBox(NULL,"传入的图像结构体指针为NULL!","错误",MB_ICONHAND);returnFALSE;}FILE*fp_BMP;errno_terr;if((err=fopen_s(&fp_BMP,filename,"rb"))!=0){MessageBox(NULL,"BMP图像文件打开失败!","错误",MB_I

3、CONHAND);returnFALSE;}//readBMPfileheadfread(&bmfh.bfType,sizeof(unsignedshort),1,fp_BMP);if(bmfh.bfType!=(unsignedshort)0x4D42){//如果文件头两个不是"BM"MessageBox(NULL,"BMP图像文件头错误!","错误",MB_ICONHAND);if(fp_BMP!=NULL)fclose(fp_BMP);returnFALSE;}fread(&bmfh.bfSize,sizeof(

4、unsignedlong),1,fp_BMP);fread(&bmfh.bfReserved1,sizeof(unsignedshort),1,fp_BMP);fread(&bmfh.bfReserved2,sizeof(unsignedshort),1,fp_BMP);fread(&bmfh.bfOffBits,sizeof(unsignedlong),1,fp_BMP);//readBMPinformationheadfread((char*)&bmih,sizeof(BITMAPINFOHEADER),1,fp_

5、BMP);bmpwidth=(int)bmih.biWidth;//因为BMP图像宽度应是4的倍数bmpheight=(int)bmih.biHeight;//读取图像高度if(bmih.biBitCount==8)nbit=1;elseif(bmih.biBitCount==24)nbit=3;else{MessageBox(NULL,"BMP图像位数错误!","错误",MB_ICONHAND);if(fp_BMP!=NULL)fclose(fp_BMP);returnFALSE;}//判断传入的图像内存空间是否和图

6、像文件大小一致if(pbuf->width!=bmpwidth

7、

8、pbuf->height!=bmpheight

9、

10、pbuf->BitCount!=bmih.biBitCount){//MessageBox(NULL,"实际BMP图像文件大小与传入的图像内存大小不一致!","错误",MB_ICONHAND);//重新分配合适大小的内存空间if(!(m_imgstr.ReAllocate_TypeImgStruct(pbuf,bmpwidth,bmpheight,bmih.biBitCount))){MessageBox

11、(NULL,"内存重新分配错误!","错误",MB_ICONHAND);if(fp_BMP!=NULL)fclose(fp_BMP);returnFALSE;}}//距离文件起始点偏移bmfh.bfOffBits,开始读图像fseek(fp_BMP,bmfh.bfOffBits,SEEK_SET);//一行的像素缓冲及大小BYTE*linebuf;intlinebuf_size;linebuf_size=(bmih.biWidth*nbit+3)/4*4;linebuf=(BYTE*)malloc(linebuf_si

12、ze*sizeof(BYTE));if(linebuf==NULL){MessageBox(NULL,"行缓冲内存分配错误!","错误",MB_ICONHAND);if(fp_BMP!=NULL)fclose(fp_BMP);returnFALSE;}//读取数据for(i=bmpheight-1;i>=0;i--){addr=i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。