在 C 格式的数组中为位图文件指定十六进制值



关于如何读取位图的头文件,我有一个简单的问题。

我的位图数组是这样的:

typedef unsigned char byte;
char bitmap[(188*180)+1024+54];  //The image size is 188*180  +  the header file of 54 bytes+ the pallete table´s 1024 bytes

我根据 bmp 标头指定值,但是当值大于字节时,我有一个问题。例如,我的图像宽度为 288,以十六进制0x120。但是,我不能简单地说:

 bitmap[19] = 0x120;

因为它比一个字节大。 根据我读到的内容,我有一个双词来存储我的图像高度(即 4 个字节),所以我可以使用 bitmap[20]bitmap[21]bitmap[22] 来存储整个数字。

我应该如何划分数字以获得存储在头文件中的相同值?我不确定在打开 bmp 文件时是添加这些值还是将其读取为单个十六进制数字。

TL;DR

这些值作为单个DWORD(32 位)数字读取。

<小时 />

BMP文件格式在维基百科以及互联网上的许多地方都有描述。请注意,正确的偏移量是 18,而不是您在问题中建议的 19。因此,四个字节位于偏移量 18、19、20 和 21。

在您的代码中:

typedef unsigned char byte;
char bitmap[(188*180)+1024+54];

要强制图像的宽度0x120 ,您可以这样做:

bitmap[18] = 0x20;
bitmap[19] = 0x01;
bitmap[20] = 0x00;
bitmap[21] = 0x00;

或者在一般情况下:

uint32_t width = ...; // 0x120 in your case, any value in general case
bitmap[18] = width & 0xff;
bitmap[19] = (width >> 8) & 0xff;
bitmap[20] = (width >> 16) & 0xff;
bitmap[21] = (width >> 24) & 0xff;

请注意,最低有效字节应位于较低的地址(小端序) - 这并不总是被记录下来,但在谈论 Windows 中的数据结构时总是隐含的。

相关内容

  • 没有找到相关文章

最新更新