在c中提取BMP图像的宽度

Extract width of BMP image in c

我是一名初级程序员,正在尝试学习 c 中的图像处理并找到了一些教程,但我卡在了一行(负责提取 widthint width = *(int*)&header[18]; 我无法理解上面的语法。 谁能简单解释一下?

int width = *(int*)&header[18];

假设 headerchar*char[] 类型,一块一块地:

header[18]

→ 获取 header

的第 18 个元素
&header[18]

→获取header

的第18个元素的地址
(int*)&header[18]

→ 将 header 的元素 18 的地址强制转换为指向 int

的指针
*(int*)&header[18]

→ 获取指向 int 的指针的内容。


BMP 文件中的值存储 little-endian。因此,此代码仅适用于小端平台。更通用的代码如下所示:

int width
  = (unsigned)(unsigned char)header[18]
  | (unsigned)(unsigned char)header[19] << 8
  | (unsigned)(unsigned char)header[20] << 16
  | (unsigned)(unsigned char)header[21] << 24;

int width 现在由移动到相应位置的单个字节组成。这应该适用于每个字节序。