2011-12-01 22 views
14

Tại sao hình ảnh BMP được lưu trữ lộn ngược và không đệm nên chúng được căn chỉnh 4 byte?Tại sao các bmps được lưu trữ lộn ngược?

+0

thể trùng lặp của [Tại sao "sải chân" trong constructor System.Drawing.Bitmap phải là một bội số của 4? ] (http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4) –

+1

http://support.microsoft .com/kb/q81498/tuyên bố upsidedownness là một tạo tác của tương thích ngược với Trình quản lý Trình bày, có nghĩa là nó là một cái gì đó mà IBM đã làm cho OS/2. –

+2

Chúng lộn ngược về khả năng tương thích với Trình quản lý bản trình bày OS/2. Nó thực sự có thể là một trong hai, bitmap đầu tiên của dòng đầu có chiều cao âm. –

Trả lời

28

Dưới đây là một trích dẫn từ Petzold:

Vì vậy, trong Dibs, hàng dưới cùng của hình ảnh là dòng đầu tiên của file, và hàng trên cùng của hình ảnh là hàng cuối cùng trong tệp. Đây là được gọi là tổ chức từ dưới lên. Bởi vì tổ chức này là phản trực giác, bạn có thể hỏi tại sao nó được thực hiện theo cách này.

Vâng, tất cả đều quay lại Trình quản lý bản trình bày OS/2. Một người nào đó tại IBM đã quyết định rằng tất cả các hệ tọa độ trong PM — bao gồm cả các hệ thống cho cửa sổ, đồ họa và bitmap — phải nhất quán. Điều này đã kích động cuộc tranh luận : Hầu hết mọi người, kể cả những lập trình viên đã làm việc với môi trường lập trình hoặc cửa sổ văn bản toàn màn hình, suy nghĩ theo điều khoản của tọa độ dọc tăng giảm xuống màn hình. Tuy nhiên, các lập trình viên đồ họa máy tính hardcore tiếp cận màn hình video từ một phối cảnh bắt nguồn từ toán học của hình học phân tích. Điều này liên quan đến một hệ tọa độ hình chữ nhật (hoặc Descartes), trong đó tăng tọa độ dọc đi lên trong không gian.

Tóm lại, các nhà toán học đã thắng. Tất cả mọi thứ trong PM đều được gắn với một nguồn gốc ở góc dưới bên trái , bao gồm cả các tọa độ cửa sổ. Và đó là cách DIBs trở thành như vậy.

Nguồn: Charles Petzold, Lập trình cho Windows 5th Edition, Chương 15.

+2

Điều thú vị là họ giữ đại diện này cho DIB nhưng thay đổi nó cho các tọa độ cửa sổ, giới thiệu lại sự không nhất quán. –

-4

Chúng được lưu trữ phù hợp với hệ tọa độ hiển thị. (0, 0) nằm ở góc trên bên trái. X (tương ứng với chiều rộng) đi từ trái sang phải. Y (tương ứng với chiều cao) đi từ trên xuống dưới.

Đối với "Câu hỏi 4 Byte" nhìn thấy Why must "stride" in the System.Drawing.Bitmap constructor be a multiple of 4?

+0

Không, không. BMP được lưu trữ từ dưới lên trên, từ trái sang phải. – mgiuca

Các vấn đề liên quan