在c中提取BMP图像的宽度
Extract width of BMP image in c
我是一名初级程序员,正在尝试学习 c 中的图像处理并找到了一些教程,但我卡在了一行(负责提取 width )
int width = *(int*)&header[18];
我无法理解上面的语法。
谁能简单解释一下?
int width = *(int*)&header[18];
假设 header
是 char*
或 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
现在由移动到相应位置的单个字节组成。这应该适用于每个字节序。
我是一名初级程序员,正在尝试学习 c 中的图像处理并找到了一些教程,但我卡在了一行(负责提取 width )
int width = *(int*)&header[18];
我无法理解上面的语法。
谁能简单解释一下?
int width = *(int*)&header[18];
假设 header
是 char*
或 char[]
类型,一块一块地:
header[18]
→ 获取 header
&header[18]
→获取header
(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
现在由移动到相应位置的单个字节组成。这应该适用于每个字节序。