我正在尝试获取有关bmp文件的一些信息。例如,我想要得到的一件事就是文件的高度。为此,我使用以下代码行:
char params[size];
fread (params, 1, size, bmpfile);
*height = *((int *)(params + 22));
然而,每当我打印高度时,我都会得到0.为什么我做错了,我应该改变什么?在此先感谢您的帮助!
答案 0 :(得分:1)
fread (params, 1, size, bmpfile);
第二个参数应为元素大小,第三个参数应为元素计数。你应该把它写成
fread (params, size, 1, bmpfile);
虽然结果会相同,但fread
的返回值除外。其余的基本上是正确的。添加错误检查以找到问题:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *bmpfile = fopen("c:\\test\\test.bmp", "rb");
if(!bmpfile)
{
printf("file not found\n");
return 0;
}
char params[54] = { 0 };
int result = fread(params, sizeof(params), 1, bmpfile);
if(result != 1)
{
printf("not bitmap file\n");
return 0;
}
if(strncmp(params, "BM", 2) != 0)
{
printf("not bitmap file\n");
return 0;
}
int width = *(int*)(params + 18);
int height = *(int*)(params + 22);
int bitcount = *(int*)(params + 28);
printf("%d %d %d\n", width, height, bitcount);
fclose(bmpfile);
return 0;
}