Why are bmps stored upside down?

Why are BMP images stored upside down and zero-padded so they are four-byte aligned?

Answers


Here's a quote from Petzold:

So, in DIBs, the bottom row of the image is the first row of the file, and the top row of the image is the last row in the file. This is called a bottom-up organization. Because this organization is counterintuitive, you may ask why it's done this way.

Well, it all goes back to the OS/2 Presentation Manager. Someone at IBM decided that all coordinate systems in PM—including those for windows, graphics, and bitmaps—should be consistent. This provoked a debate: Most people, including programmers who have worked with full-screen text programming or windowing environments, think in terms of vertical coordinates that increase going down the screen. However, hardcore computer graphics programmers approach the video display from a perspective that originates in the mathematics of analytic geometry. This involves a rectangular (or Cartesian) coordinate system where increasing vertical coordinates go up in space.

In short, the mathematicians won. Everything in PM was saddled with a bottom-left origin, including window coordinates. And that's how DIBs came to be this way.

Source: Charles Petzold, Programming for Windows 5th Edition, Chapter 15.


Need Your Help

does scriptaculous still have Javascript hacking vulnerability?

scriptaculous

Scriptaculous is listed with the Javascript Hacking vulnerability in the following site:

Filter with multiple predicates, elegant functional approach

javascript functional-programming underscore.js lodash ramda.js

I'm trying to implement filtration logic in my app. There's a table and every column header contains an input field and dropdown with filter options, you can set a filter by selecting an option e.g.

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.