如何从BMP图像信息头判断像素格式为BGR还是BGRA?
如何通过BMP位图信息头区分BGR和BGRA像素格式
当然可以靠位图信息头来准确判断!这正是BMP格式里信息头设计的核心作用之一,我给你拆解几个关键的判断依据:
核心判断:
biBitCount(位深度字段)- 如果这个字段的值是
24:那百分百是标准BGR格式,每个像素用3字节存储,顺序是蓝→绿→红,没有Alpha通道,对应你遇到的(255,255,255)这种三通道数值。 - 如果这个字段的值是
32:这时候要搭配biCompression(压缩方式字段)进一步确认:- 当
biCompression为BI_RGB(也就是无压缩)时,这就是BGRA格式,每个像素用4字节存储,顺序是蓝→绿→红→Alpha,对应你遇到的(255,255,255,0)这种带第四个值的情况。 - 极少数情况下
biCompression会是BI_BITFIELDS,这时候需要看信息头后面紧跟的3个颜色掩码值,但这种场景非常少见,普通32位无压缩BMP基本都是BGRA。
- 当
- 如果这个字段的值是
交叉验证:
biSizeImage(图像数据大小字段)
你可以通过计算来验证你的判断:- 对于24位BGR:图像数据大小 = 每行字节数(向上取整
宽度*3 / 4后再乘4) × 高度 - 对于32位BGRA:图像数据大小 =
宽度*4 × 高度
把计算结果和biSizeImage的值对比,如果一致,就说明你的格式判断完全正确。
- 对于24位BGR:图像数据大小 = 每行字节数(向上取整
最后提个小细节:BMP的像素是从图像左下角开始存储的,不过这和通道格式没关系,只是读取时要注意行的顺序~
内容的提问来源于stack exchange,提问作者HonzsSedlomn
相关产品推荐
相关产品推荐

