C 读取bmp文件并将数据发送到阵列
我正在尝试获取有关bmp文件的一些信息。例如,我想知道的一件事是文件的高度。为此,我使用以下代码行:C 读取bmp文件并将数据发送到阵列,c,fread,bmp,C,Fread,Bmp,我正在尝试获取有关bmp文件的一些信息。例如,我想知道的一件事是文件的高度。为此,我使用以下代码行: char params[size]; fread (params, 1, size, bmpfile); *height = *((int *)(params + 22)); 但是,每当我打印高度时,我得到0。为什么我所做的不正确,我应该改变什么?提前感谢您的帮助 fread(参数,1,大小,bmpfile) 第二个参数应该是元素大小,第三个参数应该是元素计数。你应该这样写 fread (pa
char params[size];
fread (params, 1, size, bmpfile);
*height = *((int *)(params + 22));
但是,每当我打印高度时,我得到0。为什么我所做的不正确,我应该改变什么?提前感谢您的帮助
fread(参数,1,大小,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;
}
#包括
#包括
内部主(空)
{
文件*bmpfile=fopen(“c:\\test\\test.bmp”,“rb”);
如果(!bmpfile)
{
printf(“未找到文件”);
返回0;
}
字符参数[54]={0};
int result=fread(params,sizeof(params),1,bmpfile);
如果(结果!=1)
{
printf(“非位图文件\n”);
返回0;
}
如果(strncmp(参数“BM”,2)!=0)
{
printf(“非位图文件\n”);
返回0;
}
整数宽度=*(整数*)(参数+18);
整数高度=*(整数*)(参数+22);
int位计数=*(int*)(参数+28);
printf(“%d%d%d\n”,宽度、高度、位计数);
fclose(bmpfile);
返回0;
}
我怀疑这与我的fread有关,但我不确定如何处理它查看任何格式说明。看起来你读的是“颜色平面的数量”,而不是高度。(您正在假设它的终结性与您的系统相匹配,这可能会影响到其他系统或其他格式。)