BGRA 数据为什么与bmp 上下颠倒

BGRA 数据为什么与bmp 上下颠倒

BGRA 数据与 BMP 图像 “上下颠倒” 的本质,是 BMP 图像文件的存储规范与屏幕显示 / 内存中 BGRA 数据的排列顺序不一致 导致的,核心原因是 BMP 格式的 “历史设计特性” 和 “硬件适配逻辑”,具体可以从以下 3 个维度拆解:

一、根源:BMP 格式的 “底部优先” 存储规则

BMP(Bitmap)是微软早期为 Windows 系统设计的图像格式,其像素存储规则遵循 “底部优先”(Bottom-Up),即:

BMP 文件中,第一个像素数据对应图像的 “左下角”,后续像素逐行向上存储,最后一个像素对应图像的 “右上角”;

而我们在屏幕上看到的图像、或内存中临时存储的 BGRA 数据(如从摄像头、渲染缓冲区获取的 BGRA),默认是 “顶部优先”(Top-Down):第一个像素对应图像 “左上角”,逐行向下存储,最后一个像素对应 “右下角”。

举个直观例子(假设图像是 3×2 像素,宽 3、高 2):

存储场景

像素排列顺序(从第一个像素到最后一个)

对应图像位置

内存中 BGRA

(0,0) → (1,0) → (2,0) → (0,1) → (1,1) → (2,1)

左上角 → 右上角 → 左下角 → 右下角

BMP 文件中

(0,1) → (1,1) → (2,1) → (0,0) → (1,0) → (2,0)

左下角 → 右下角 → 左上角 → 右上角

可见,两者的 “行顺序” 完全相反 —— 这就是 “上下颠倒” 的