c - 在c中提取BMP图像的宽度

标签 c image-processing bmp

我是一名初级程序员,正在尝试用 C 语言学习图像处理并找到了一些教程,但我卡在了一行(负责提取 宽度 ) int 宽度 = *(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 现在由移动到相应位置的各个字节组成。这应该适用于所有字节序。

关于c - 在c中提取BMP图像的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50908563/

相关文章:

c - 您如何使用 Xcode 在 OS X 上以普通用户身份调试 libpcap 代码?

c++ - 为什么我们用汇编语言编写操作系统的一部分,而用高级语言(如c)编写一部分操作系统?

image-processing - 用于文本识别的图像预处理

opencv - 比较特征描述符测试?

c++ - 尽快将图像数据写入磁盘

c - 与 C 中的宏相关的语法错误

c - Debian Squeeze/Wheezy 中缺少 XCB header

c - 使用 C 在字节数组中实时显示 .jpeg

android - 旋转 bmp 并将其正面朝上显示

c - 在 .bmp 中隐藏文本