Windows 點陣圖 (.bmp)
微軟 標準點陣圖圖片檔案(BMP)是微軟基本的裝置獨立點陣圖形格式,可儲存未壓縮或 RLE 壓縮的掃描線,並直接相容於硬體影格緩衝區。
將 BMP 轉換為 PNG
免費的瀏覽器端 BMP 轉 PNG 轉換器。在您的裝置上即時轉換檔案。
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 BMP 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 BMP 檔案:
十六進位簽章(偏移量 0):
42 4DASCII 表示法: BM
標準化: 微軟 Windows 裝置獨立點陣圖(DIB)架構
技術規格
| 容器架構 | BITMAPFILEHEADER 後接 BITMAPINFOHEADER(DIB)與點陣像素陣列 |
| 壓縮 | 未壓縮的原始掃描線,或選用的 BI_RLE8 / BI_RLE4 遊程編碼 |
| 位元組序 | 小端序(Intel x86 位元組順序) |
| 色彩空間 | 裝置相依 RGB, sRGB(內嵌 BITMAPV5HEADER) |
| 色版與結構 | 1 位元單色、4 位元 / 8 位元色盤、16 位元、24 位元 RGB,或 32 位元 RGBA |
| 最大尺寸 | 2,147,483,647 × 2,147,483,647 像素(具正負號的 32 位元整數) |
| 透明度 | 現代 BITMAPV3HEADER 與 V5HEADER 格式支援 32 位元 BGRA Alpha 遮罩 |
| 串流與漸進式 | 不可串流;除非高度為負數,否則掃描線會上下顛倒儲存(由下而上) |
技術比較矩陣:BMP 對比競爭格式
| 技術屬性 | BMP (目前) | PNG | TIFF | JPG |
|---|---|---|---|---|
| 壓縮模式 | 未壓縮 / 最小 RLE | 無損 Deflate 壓縮;檔案大小節省量隨圖片內容而異 | 未壓縮 / LZW / Zip | 有損 DCT(縮小約 90%) |
| 解碼速度 | 即時記憶體複製 | 需要 Deflate 解壓縮 | 需要 LZW / ZIP 解壓縮 | 需要 IDCT 計算 |
| 掃描線順序 | 由下到上(反向) | 由上到下 | 由上到下 / 條帶 | 由上到下 MCU 區塊 |
| 網頁適用性 | 非常差(酬載肥大) | 極適合圖形 | 差(桌面出版) | 極適合相片 |
常見損壞模式與十六進位修復指南
圖片顯示時出現斜向剪切或以特定角度傾斜。
根本原因: 錯誤的列填補計算(未能將每條掃描線填補至 4 位元組邊界)。
修復: 使用 File2File.app 圖片轉換器重新編碼,以強制使用正確的 32 位元掃描線步幅。
安全性分析與解析器攻擊向量
BMP 解碼器在根據不受信任的 DIB 標頭尺寸配置緩衝區時,經常遭受緩衝區過度讀取的問題。
已知攻擊向量
- width * height * bpp 計算發生整數溢位,導致小的堆積配置與超出範圍寫入。
- 損壞的 RLE8 / RLE4 遊程長度跳脫序列,導致記憶體寫入超過已配置的緩衝區。
- 透過精心製作的標頭尺寸觸發多 GB 記憶體配置,導致阻斷服務。
防禦最佳實務: 在配置目的記憶體之前,請嚴格驗證 DIB 標頭的寬度、高度與位元深度範圍。
歷史起源與里程碑
1998Windows 98 引入 BITMAPV5HEADER,新增 ICC 色彩設定檔管理與伽瑪校正。
1990Windows 3.0 在整個作業系統中標準化 BITMAPINFOHEADER DIB 規格。
1987隨 Windows 2.0 與 OS/2 1.1 一起引入,作為原生顯示點陣格式。
主要優勢與優點
- 零壓縮劣化:100% 位元精確的像素儲存,完全沒有壓縮失真。
- BMP 擁有原生的 Windows 編解碼器,而其他作業系統與應用程式中的支援程度則各不相同。
- 極低的解碼複雜度使其成為嵌入式微控制器與圖形程式設計教育的理想選擇。
技術限制與缺點
- 由於缺乏像 DEFLATE 或霍夫曼編碼這類現代熵壓縮,導致檔案非常巨大。
- 不適用於網路傳輸或行動網路散佈。
- 由下而上的掃描線排序需要在現代由上而下的圖形管線中進行垂直列反轉。
有趣的技術冷知識
- 由於 OS/2 中使用的數學笛卡兒座標系統,BMP 預設會將圖片掃描線上下顛倒(由下到上)儲存。
- 如果 BMP 標頭中的高度值設為負數,圖片就會正面朝上(由上到下)解碼。
- BMP 檔案中的每一條掃描線必須以零填補至 4 位元組的倍數(32 位元邊界對齊)。
常見技術問題
為什麼 BMP 檔案這麼大?
BMP 檔案為每一個像素儲存原始的未壓縮色彩值,而像 PNG 這樣的格式則會在不損失任何品質的情況下壓縮該資料。
BMP 可以支援透明度嗎?
可以。32 位元 BMP 檔案(使用 BITMAPV3HEADER 或更新版本)可以儲存 8 位元 Alpha 通道,不過支援度因較舊的軟體而異。
如何縮減 BMP 檔案的大小?
將 BMP 檔案轉換為 PNG 可以減少檔案大小,同時保留像素值,但結果取決於圖片內容和 BMP 編碼。