You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何制作4bpp自定义位图文件?4位色深位图生成报错求解

BMP 4bpp生成问题排查

核心错误点

你使用的是12字节长度的BITMAPCOREHEADER结构,存在三个关键错误:

  • 调色板结构用错:BITMAPCOREHEADER对应的调色板条目是RGBTRIPLE类型,每个条目仅3字节,顺序为蓝、绿、红,没有额外保留位。你新增红色条目时多写了1字节,直接导致整个文件结构错位,解析器无法识别。
  • 颜色存储顺序搞反:你想要的红色RGB(255,0,0),在BMP调色板中需要按BGR顺序存储为00 00 FF,你写的FF 00 00实际对应蓝色。
  • 元数据计算错误:修改调色板长度后,文件头的bfSize(文件总大小)、bfOffBits(像素数据起始偏移)两个字段需要重新精确计算,你随意修改的27和24不符合实际结构长度。

关于颜色表的疑问

可以直接在颜色表中放入任意RGB值(转换为BGR顺序存储即可),只要像素数据里的索引值对应颜色表的位置,就能正常引用,没有额外限制。如果需要兼容全平台解析器,位深<=8时,调色板条目数建议补到2^位深个,也就是4bpp补满16个RGBTRIPLE,未使用的条目填充0即可,避免部分解析器校验不通过。

可参考的4bpp单红色像素位图十六进制示例(使用BITMAPCOREHEADER)

42 4D 28 00 00 00 00 00 00 00 24 00 00 00 0C 00
00 00 01 00 01 00 01 00 04 00 FF FF FF 00 00 00
00 00 FF 20 00 00 00

结构说明:

  • 文件总大小0x28=40字节
  • 像素数据起始偏移0x24=36字节
  • 调色板共3个RGBTRIPLE,分别对应索引0(白色)、索引1(黑色)、索引2(红色)
  • 像素数据0x20表示1个像素引用索引2的红色,剩余4位补0,末尾补3个0满足扫描行4字节对齐要求

内容的提问来源于stack exchange,提问作者zdwlees

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:08