【问题标题】:Why are bmps stored upside down?为什么bmps是倒置存储的?
【发布时间】:2012-01-10 21:06:34
【问题描述】:

为什么 BMP 图像要倒置存储并补零,以便它们是四字节对齐的?

【问题讨论】:

  • support.microsoft.com/kb/q81498 声称颠倒是与 Presentation Manager 向后兼容的产物,这意味着它是 IBM 为 OS/2 所做的。
  • 为了与 OS/2 Presentation Manager 兼容,它们是颠倒的。实际上可以是,顶行第一位图的高度为负数。
  • @HansPassant,具有负高度的功能是位图格式普及后很好地添加的功能。
  • 大家解决这个 BMP 浏览器插件/png/jpg 通用“未压缩”替换库不会自己编写的负高度参数!!

标签: windows image legacy bmp


【解决方案1】:

这是来自 Petzold 的一句话:

因此,在 DIB 中,图像的底行是文件的第一行, 图像的第一行是文件中的最后一行。这是 称为自下而上的组织。因为这个组织是 违反直觉,您可能会问为什么要这样做。

嗯,这一切都可以追溯到 OS/2 演示管理器。有人在 IBM 决定 PM 中的所有坐标系——包括那些用于 窗口、图形和位图——应该是一致的。这引起了 辩论:大多数人,包括曾经合作过的程序员 全屏文本编程或窗口环境,用术语思考 沿屏幕向下增加的垂直坐标。然而, 铁杆计算机图形程序员从 一种起源于解析几何数学的观点。 这涉及一个矩形(或笛卡尔)坐标系,其中 增加的垂直坐标在空间中上升。

简而言之,数学家赢了。 PM的一切都背负着 左下角原点,包括窗口坐标。这就是DIB的方式 变成了这样。

来源:Charles Petzold,Programming for Windows 5th Edition,第 15 章。

【讨论】:

  • 有趣的是,他们为 DIB 保留了这种表示,但为窗口坐标更改了它,重新引入了不一致。
【解决方案2】:

它们被相应地存储在显示坐标系中。 (0, 0) 在左上角。 X(对应于宽度)从左到右。 Y(对应高度)从上到下。

至于“4 Byte question”见Why must "stride" in the System.Drawing.Bitmap constructor be a multiple of 4?

【讨论】:

  • 不,他们不是。 BMP 从下到上、从左到右存储。
猜你喜欢
  • 2018-08-14
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多