爲什麼BMP圖像顛倒存儲並填零,所以它們是四字節對齊的?爲什麼bmps倒過來存儲?
回答
下面是從彼佐爾德報價:
所以,在的DIB,圖像的底行是文件的第一行, 和圖像的最上面一行是文件的最後一行。這是 被稱爲自下而上的組織。因爲這個組織是不直觀的,所以你可能會問爲什麼這樣做。
那麼,這一切都可以追溯到OS/2演示文稿管理器。有人在 IBM決定PM中的所有座標系(包括那些用於窗口,圖形和位圖的 )都應該一致。這引發了一場關於 的爭論:大多數人,包括曾與 全屏幕文本編程或窗口環境合作的程序員,都認爲 的垂直座標增加,並沿着屏幕增加。然而, 核心計算機圖形程序員從 接近視頻顯示的角度來源於解析幾何的數學。 這涉及一個矩形(或笛卡爾)座標系統,其中 增加的垂直座標在空間上升。
總之,數學家贏了。 PM中的所有內容都有一個包含窗口座標的左下角原點 。這就是DIBs 如何成爲這種方式。
來源:查爾斯Petzold的,Windows編程第五版,第15章
有趣的是,他們保持DIB的這種表示形式,但將其更改爲窗口座標,重新引入不一致性。 –
它們被相應地存儲到顯示座標系中。 (0,0)位於左上角。 X(對應寬度)從左到右。 Y(對應於高度)從上到下。
至於「4字節的問題」看到Why must "stride" in the System.Drawing.Bitmap constructor be a multiple of 4?
不,他們不是。 BMP從下到上,從左到右存儲。 – mgiuca
- 1. rDNS爲什麼會顛倒存儲IP地址?
- 2. 爲什麼存儲過程不運行?
- 3. 爲什麼我們使用堆來存儲內存?
- 4. 爲什麼HBITMAP被倒置
- 5. 什麼集合來存儲樹結構?
- 6. 什麼是錯在我的代碼來調用存儲過程
- 7. 爲什麼存儲過程結果爲零?
- 8. 爲什麼我需要使用存儲過程的PDOStatement :: nextRowSet來獲取結果?
- 9. 爲什麼我不能傳遞唯一標識符/ GUID來存儲過程
- 10. 什麼是在這個存儲過程
- 11. 存儲過程的要點是什麼?
- 12. 什麼是使用存儲過程
- 13. 爲什麼在PHP中使用數組來存儲login -info?
- 14. 默認值來自xml偏好文件不存儲 - 爲什麼?
- 15. 爲什麼我無法獲得它來存儲正確的cookie?
- 16. 爲什麼Java使用堆數據結構來存儲對象?
- 17. 爲什麼最好使用UUID來存儲唯一的ID值?
- 18. 爲什麼使用app.config來存儲配置數據?
- 19. 爲什麼使用MessageQueue來存儲異常消息?
- 20. 存儲過程來搜索
- 21. 有什麼辦法來知道哪些存儲過程通過我的代碼?
- 22. 爲什麼我的PHP不會返回MySQL存儲過程?
- 23. 爲什麼大網站不喜歡本地存儲超過cookie?
- 24. 此數據存儲爲什麼通過鍵返回無查詢?
- 25. 爲什麼我不能執行存儲過程? (OracleException被捕獲)
- 26. 爲什麼這個存儲過程返回NULL
- 27. 爲什麼不運行這個SQL?火鳥存儲過程
- 28. 爲什麼比較不正確地存儲過程/函數?
- 29. 爲什麼不是從存儲過程內創建表?
- 30. 爲什麼這個存儲過程返回一個空集?
的可能重複[ 「步幅」,在System.Drawing.Bitmap構造爲什麼必須是4的倍數? ](http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4) –
http://support.microsoft .com/kb/q81498 /聲稱顛倒性是向後兼容Presentation Manager的人爲因素,這意味着它是IBM爲OS/2所做的。 –
爲了與OS/2 Presentation Manager兼容,它們是顛倒的。它實際上可以是,頂線第一個位圖有一個負高度。 –