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)
左下角 → 右下角 → 左上角 → 右上角
可见,两者的 “行顺序” 完全相反 —— 这就是 “上下颠倒” 的