gpt4 book ai didi

c - 读取 BMP header ,打包。读取错误值

转载 作者:行者123 更新时间:2023-11-30 16:00:27 29 4
gpt4 key购买 nike

我最近编写了一个程序来读取 BMP 文件的文件头和信息头。我如图所示包装它们,将它们折叠起来,然后打印宽度和高度。不幸的是,宽度和高度不正确。我不知道为什么。也许有点/小尾数问题?如果是这样我不知道如何解决它。我正在 GCC 上编译并运行它。

#pragma pack(1)

typedef struct
{
unsigned char fileMarker1; /* 'B' */
unsigned char fileMarker2; /* 'M' */
unsigned int bfSize;
unsigned short unused1;
unsigned short unused2;
unsigned int imageDataOffset; /* Offset to the start of image data */
}FILEHEADER;

typedef struct
{
unsigned int biSize;
signed int width; /* Width of the image */
signed int height; /* Height of the image */
unsigned short planes;
unsigned short bitPix;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
}INFOHEADER;

#pragma pack()

......

 fread( &header, sizeof(FILEHEADER), 1, image );

......

 fread( &iheader, sizeof(INFOHEADER), 1, image );

......

 printf("Width: %i\n", iheader.width);
printf("Height: %i\n", iheader.height);

最佳答案

Windows 位图文件确实以小端存储。因此,假设您的系统是大端字节序,则在加载后您需要反转每个 2 或 4 字节 int 值的字节序。这个IBM article描述了执行此操作的各种方法。

关于c - 读取 BMP header ,打包。读取错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738660/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com