256级灰度bmp文件读写的源代码+c语言图像处理

256级灰度bmp文件读写的源代码+c语言图像处理

ID:1533017

大小:265.50 KB

页数:12页

时间:2017-11-12

256级灰度bmp文件读写的源代码+c语言图像处理_第1页
256级灰度bmp文件读写的源代码+c语言图像处理_第2页
256级灰度bmp文件读写的源代码+c语言图像处理_第3页
256级灰度bmp文件读写的源代码+c语言图像处理_第4页
256级灰度bmp文件读写的源代码+c语言图像处理_第5页
资源描述:

《256级灰度bmp文件读写的源代码+c语言图像处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、本文档最早发布于http://blog.sina.com.cn/u/14951820541.256级灰度BMP文件读写的源代码!首先要明白256级灰度BMP文件的格式1.首先是一个14个字节的文件头,定义如下typedefstructtagBITMAPFILEHEADER{ WORD   bfType; DWORD  bfSize; WORD   bfReserved1; WORD   bfReserved2; DWORD  bfOffBits;}BITMAPFILEHEADER,*PBITMAPFILEHEADER;bfType是表明BMP文件类型的数据,在这里我们填入的是0x4d

2、42,其实就是BM两个字,bfSize是文件大小,bfOffBits是文件头到数据块的偏移量,对于256级灰度图,就是1078个字节,后面会做描述2.接下来是40个字节的是描述位图属性的40个字节typedefstructtagBITMAPINFOHEADER{ DWORD biSize; LONG  biWidth; LONG  biHeight; WORD  biPlanes; WORD  biBitCount; DWORD biCompression; DWORD biSizeImage; LONG  biXPelsPerMeter; LONG  biYPelsPerMeter

3、; DWORD biClrUsed; DWORD biClrImportant;}BITMAPINFOHEADER,*PBITMAPINFOHEADER; 这里面只有biWidth表示宽度,biPlanes表示高度,biBitCount对于256级灰度正好是83.由于是256级灰度图,那么有256个调色板数据,每个调色板是如下定义的typedefstructtagRGBQUAD{   BYTE   rgbBlue;   BYTE   rgbGreen;   BYTE   rgbRed;   BYTE   rgbReserved;}RGBQUAD,*PRGBQUAD;调色板数据其实告诉

4、了显示器实际显示的时候的具体颜色,所以调色板长度是1024字节4.最后是按行组织的图像数据,但这些数据并不是简单的按照图像的高度宽度w*h的数组数据这些数据最重要的特点是a.按行组织,每行宽度是w,但是要进行4个字节的对齐。比如如果是图像宽度是253,那么数据对齐后一行还是有256个字节。对齐可以用下面的宏来计算#defineGET_ALIGN(x) (((x+3)/4)*4)b.图像数据是倒行的,也就是数据第一行对应图像最后一行,最后一行数据对应第一行 图像的实际数据之前的偏移量是:sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+

5、256*sizeof(RGBQUAD)=14+40+1024=1078个字节。下面是实际的BMP文件输入输出函数代码:/*********************************************/从文件读入内存代码:pw返回宽度;ph返回高度;函数返回内存指针;/*********************************************/unsignedchar* read_bmp(constchar*pszFileName, int*pw,int*ph){ BITMAPFILEHEADERbfh; BITMAPINFOHEADERbmh; FILE*

6、fp; unsignedchar*pImg=NULL; inti; fp=fopen(pszFileName,"rb");//二进制打开 if(fp==NULL)returnNULL; fread(&bfh,sizeof(BITMAPFILEHEADER),1,fp); fread(&bmh,sizeof(BITMAPINFOHEADER),1,fp);//判断是否8bit的图像 if(bfh.bfType!=0x4d42&&bmh.biBitCount!=8)returnNULL; pImg=(unsignedchar*)malloc(bmh.biWidth*bmh.biHeigh

7、t);//开辟空间 *pw=bmh.biWidth; *ph=bmh.biHeight; for(i=0;i

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

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

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