问题描述
- 用c语言读写bmp图像,图像的高和宽输出不正确,请问代码哪里有问题?哪位大神可以解答一下,谢谢
- #include
#include
#includeint 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%dn""picturetext""bmpWidthbmpHeight);
}
return 0;
}/*ReadBmp:将给定bmp文件读入内存,存放在相应的全局变量中。0为失败,1为成功*/
int ReadBmp(const char bmpName){
FILE *fp=fopen(bmpNamerb""); /二进制读方式打开指定的图像文件*/
if(fp==NULL)
return 0;
fread(&fileHeadsizeof(BITMAPFILEHEADER)1fp); /*读文件信息头*/
fread(&infoHeadsizeof(BITMAPINFOHEADER)1fp); /*读位图信息头*/
bmpWidth=infoHead.biWidth; /*获取图像宽,高,每像素所占位数等信息 /
bmpHeight=infoHead.biHeight;
biBitCount=infoHead.biBitCount;
lineByte=(bmpWidth*biBitCount/8+3)/4*4; /计算每行字节数(必须是4的倍数)*/
if(biBitCount==8){ /*灰度图像有颜色表,且颜色表表项为256*/
fread(pColorTablesizeof(RGBQUAD)256fp); /*读颜色表*/
}
/*申请位图数据所需要的空间*/
pBmpBuf=(unsigned char*)malloc(sizeof(unsigned char)*lineByte*bmpHeight);
fread(pBmpBuf1lineByte*bmpHeightfp); /*读位图数据*/
fclose(fp);
return 1;
}