尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

BMP像素偏移 读取 代码说明

BMP像素偏移 读取 代码说明 原生简化写法存在平台兼容风险不推荐工程使用unsigned int pixel_off 0; lseek(bmp_fd, 0x0A, SEEK_SET); read(bmp_fd, pixel_off, 4);风险说明BMP 文件内部数值统一以小端序存放这段代码直接把文件 4 字节拷贝到无符号整型变量解析结果由 CPU 硬件字节序决定x86/x64 PC 属于小端架构运行时数值解析正常代码可正常跑通ARM、RK3568 等嵌入式大端平台运行时4 个字节顺序倒置像素偏移计算出错像素读取错位、画面花屏。该写法仅能在特定架构下临时使用存在跨平台兼容隐患通用性差。规范无风险写法最终采用方案unsigned int bfOffBits; unsigned char buf[4]; lseek(bmp_fd,0x0A,SEEK_SET); read(bmp_fd,buf,4); bfOffBits (buf[3] 24) | (buf[2]16) | (buf[1]8) | buf[0];原理先使用字节数组存储文件原始字节流隔离 CPU 自身字节序带来的影响严格遵循 BMP 小端存储规则手动移位拼接 32 位偏移值不依赖 CPU 架构PC、各类嵌入式板子均可稳定解析无兼容风险。补充等价说明bfOffBits (buf[3] 24) | (buf[2]16) | (buf[1]8) | buf[0];与 bfOffBits buf[0] | (buf[1] 8) | (buf[2] 16) | (buf[3] 24);位或运算满足交换律两种写法运算结果完全相同仅书写顺序有区别。
返回列表