Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取bmp文件并将数据发送到阵列_C_Fread_Bmp - Fatal编程技术网

C 读取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

我正在尝试获取有关bmp文件的一些信息。例如,我想知道的一件事是文件的高度。为此,我使用以下代码行:

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有关,但我不确定如何处理它查看任何格式说明。看起来你读的是“颜色平面的数量”,而不是高度。(您正在假设它的终结性与您的系统相匹配,这可能会影响到其他系统或其他格式。)