2 qq 34526102 qq_34526102 于 2016.04.10 18:44 提问

用c语言读写bmp图像,图像的高和宽输出不正确,请问代码哪里有问题?哪位大神可以解答一下,谢谢
bmp

#include
#include
#include

int ReadBmp(const char bmpName); /函数原型*/
BITMAPFILEHEADER fileHead; /*文件信息头*/
BITMAPINFOHEADER infoHead; /*位图信息头*/
RGBQUAD pColorTable[256]; /*颜色表指针*/
unsigned char pBmpBuf; /图像数据指针*/
int bmpWidth; /*图像的宽*/
int bmpHeight; /*图像的高*/
int biBitCount; /*每像素位数*/
int lineByte; /*每行的字节数*/

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char argv[]) {
if(ReadBmp("picturetext.BMP")){
printf("%s的宽度和高度为:%d
%d\n","picturetext",bmpWidth,bmpHeight);
}
return 0;
}

/*ReadBmp:将给定bmp文件读入内存,存放在相应的全局变量中。0为失败,1为成功*/
int ReadBmp(const char bmpName){
FILE *fp=fopen(bmpName,"rb"); /
二进制读方式打开指定的图像文件*/
if(fp==NULL)
return 0;
fread(&fileHead,sizeof(BITMAPFILEHEADER),1,fp); /*读文件信息头*/
fread(&infoHead,sizeof(BITMAPINFOHEADER),1,fp); /*读位图信息头*/
bmpWidth=infoHead.biWidth; /*获取图像宽,高,每像素所占位数等信息 /
bmpHeight=infoHead.biHeight;
biBitCount=infoHead.biBitCount;
lineByte=(bmpWidth*biBitCount/8+3)/4*4; /
计算每行字节数(必须是4的倍数)*/
if(biBitCount==8){ /*灰度图像有颜色表,且颜色表表项为256*/
fread(pColorTable,sizeof(RGBQUAD),256,fp); /*读颜色表*/
}
/*申请位图数据所需要的空间*/
pBmpBuf=(unsigned char*)malloc(sizeof(unsigned char)*lineByte*bmpHeight);
fread(pBmpBuf,1,lineByte*bmpHeight,fp); /*读位图数据*/
fclose(fp);
return 1;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!