c语言bmp文件读取的问题
很纠结的一个问题 下面的程序 我分别对两个图片(都是24位的灰度图)操作 有一个成功了 一个失败了一直找不到原因一个是400*400 一个是320*213 帮忙看看 分析一下哈谢谢啦
新建 360压缩 ZIP 文件.zip
(227.9 KB)
程序代码:
#include <stdio.h> #include <stdlib.h> #include<Windows.h> struct color{ unsigned char red; unsigned char green; unsigned char blue; }color; void main(){ BITMAPFILEHEADER file; BITMAPINFOHEADER info; FILE *p,*p1; int i,j; long x,y; struct color temp[450][450]; p=fopen("MM.bmp","rb"); p1=fopen("CHMM.bmp","wb"); fread(&file,sizeof(BITMAPFILEHEADER),1,p);//头文件的读取与存储 fread(&info,sizeof(BITMAPINFOHEADER),1,p); fwrite(&file,sizeof(BITMAPFILEHEADER),1,p1); fwrite(&info,sizeof(BITMAPINFOHEADER),1,p1); y=info.biHeight;//读取文件高度 x=info.biWidth;//读取文件宽度 printf("%d %d\n",x,y); if(file.bfType!=0x4d42){//检验是否为bmp文件 printf("不是bmp图片\n"); return; } for(i=1;i<=x;i++){//用for循环读取像素(这个bmp为24位,所以没有颜色表) for(j=1;j<=y;j++){ fread(&color,sizeof(struct color),1,p); temp[i][j].blue=color.blue; temp[i][j].green=color.green; temp[i][j].red=color.red; } } for(i=1;i<=x;i++){//读取之后再存入文件 for(j=1;j<=y;j++){ fwrite(&temp[i][j],sizeof(struct color),1,p1); } } fclose(p1); fclose(p); getchar(); }