跳至內容

BMP

出自Taiwan Tongues 客語維基
於 2025年8月23日 (六) 17:56 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

BMP取自點陣圖Bitmap个縮寫,又安到DIB(同裝置無關係个點陣圖), 這係一種獨立在監視器个點陣圖數位影像檔案个格式。常見在微軟視窗摎 OS / 二作業系統,Windows GDI API 內部使用个 DIB 資料結構摎 BMP 檔案格式大體都共樣。

圖像通常儲存个色目深度有二(一位)、 十六(四位元)、 兩百五十六(八個元)、 六齣五千五百三十六(十六位元)同一千六百七十萬(二十四位元)種色(其中位係表示逐點所用个資料位)。 八位元圖像做得係索引彩色圖像外,乜做得啊係灰階圖像啊。表示透明个 alpha 通道也做得儲存在一個類似灰階圖像个獨立檔案當中。帶有整合个 alpha 通道个三十二個元版本已經跈等吔 Windows XP 出現,佢在 Windows 系統个登入介面摎系統主題當中都有使用。

儲存演算法

BMP 檔案一般係毋會壓縮个,故所佢兜一般比共一幅圖像个壓縮圖檔格式愛大當多。比將講,一個八百 × 六百个二十四個銀差毋多占咧一千五百空四 MB 空間。故所佢一般毋適合在網際網路或者其他低速或者有容量限制个媒介頂高進行傳輸。

根據色目深度个無共樣,圖像上个一隻像齋做得用一隻抑係幾下隻位元組表示,佢由n / 八所確定(n 係一隻深度,一位元組包含八個資料位)。 圖片瀏覽器這兜元組个圖片 ASCII 值計算像素个色,過對調色盤中讀出相應个值。擱較詳細个資訊請參閱下背有關點陣圖檔案个部份。

n 位二 n 種色个包含調色盤个點陣圖近似位元組數做得用下背个公式來計算:

BMP 檔案大細$ \ approx 五十四 + 四 \ cdot二 ^ { n } + { \ frac { { \ rm { width } } \ cdot { \ rm { height } } \ cdot n } { 八 } } $,其中高度(height)摎闊度(width)都以像素為單位。

需要注意个係頂高公式中个五十四係點陣圖檔案个檔案頭,$ 四 \ cdot 二 ^ { n } $ 係彩色調色盤个大細。 係講點陣圖檔案毋包含調色盤,比將講二十四位元,三十二儕元點陣圖,斯點陣圖个差毋多位元組數使得用下背个公式來算:

BMP 檔案大細$ \ approx 五十四 + { \ frac { { \ rm { width } } \ cdot { \ rm { height } } \ cdot n } { 八 } } $,其中高度(height)摎闊度(width)都以像素為單位。

另外需要注意个係這係一隻近似值,對於 n 位个點陣圖像來講,就算可能有盡多 $ 二 ^ { n } $ 種色,一個特定个圖像可能並毋會使用這兜所有个色。因為彩色調个盤單淨定義了圖像所用个色,故所實際个彩色調色盤會比 $ 四 \ cdot 二 ^ { n } $。

像係係想愛知這兜值係仰仔得著个,請參考下背檔案格式个部分。

因為儲存演算法本身決定个因素,根據幾隻圖像參數个無共樣計算出來个大細同實際个檔案大細會有兜仔爭差。

==檔案格式==點陣圖檔由這干大細固定(檔案頭)同大細可變个結構體照一定个順序構成。因為這個檔案格式幾下個經驗演進,這兜結構體个版本也當多。

點陣圖檔案由以下結構體依照次構成:

下背个部分會詳細地描寫點陣圖檔案當中儲存个資料。需要注意个係這係標準點陣圖个檔案格式,其他一息仔陣圖像可能根據生成檔案个應用程式無共樣使用格式可能會有微毛个區別。

點陣圖檔案頭

這部份資料塊在檔案開頭,用在檔案个辨識當中。典型个應用程式會首先普通讀取這部份資料來確定係點个檔案還過無損壞。所有个整數值都係用小端序放(最低有效位前置)。

DIB 頭那

這部份同應用程式圖像个詳細个資訊,在螢幕項顯示圖像將會使用這兜个資訊,佢對檔案个第十五隻位元組開始。

這部分資料塊對應吔 Windows 摎 OS / 二中个內部使用个頭結構還有其他一兜版本个變體。毋過所有版本都以一隻 DWORD 位(三十二位元)開始,用來說明這個資料區域个大細,使得應用程式做得根據這隻大細來區分該圖像實際使用咧哪種版本个 DIB 頭結構。

存在幾下種版本个頭結構个原因係微軟著 DIB 格式進行過幾下擺擴充。下表斯係所有無共樣版本个 DIB 頭那:

BITMAPCOREHEADER 過後个版本嚕淨係在前一版本結構尾追加欄位。

相容性个考量,大部分應用程式使用較舊版本个 DIB 頭儲存檔案。在無考慮 OS / 二个情況下,目前通用个格式為 BITMAPINFOHEADER 版本,內容在下表裡背列出來。除非有特殊說明,其中所有个值全部都係無符號歸數。

注意哦:BI \ _ RGB 圖像个圖像大細欄位會係零。

壓縮方法欄位(位元組 # 三十五月三十三)个有效值像下表:

注意哦: BI \ _ JPEG 摎 BI \ _ PNG 淨對印表機帶來有效,無支援螢幕彩現。

除此之外,OS / 二个 BITMAPCOREHEADER 頭那也毋萋見:

注意哦:OS / 二 BITMAPCOREHEADER 个點陣圖都係無壓縮个,還過做毋得係十六抑係三十二位元 / 像齋。OS / 二 BITMAPCOREHEADER 中个所有值全部都係無符號歸个。

調色盤

這部份定義吔圖像當中用个色。比將講嗬,點陣圖像一隻像素續等一隻像素儲存,逐隻像素使用一隻抑係幾下隻位元組个值時表示,所以調色盤个目的就係摎應用程式這兜值所對應个實際色目。典型个點陣圖檔案使用 RGB 彩色模型。在這種模型裡肚,每一種色都係由無共樣个強度(從零到最大个強度)紅色(R)、 青色(G)同藍色(B)組成个,也就係講,每一種色嚕做得用紅色、綠色同藍色个值所定義。

在點陣圖个檔案實現中,調色盤做得包含當多條目,條目個數就係圖像中所使用个色个個數。

逐隻條目用來描寫一種色,包含著有四個位元組,其中三個表示藍色、綠色色同紅色,第四隻位元組無好用(大部分个應用程式摎佢設為零); 對於每一隻位元組,數值零表示這種色分量在當前个色目無使用,而數值兩百五十五表示這種色分量使用盡大个強度。

像素儲存

表示點陣圖像素个位元係用行為單位對齊儲存个,每一行个大細都向上取整為四位元組(三十二位元 DWORD)个倍數。係講圖像个高度大於一,當多隻經過填充實現對齊个行就形成吔像素陣列

完整儲存个一行像素需要个位元組數做得通過這隻公式來算:


$ { \ mbox { RowSize } }=\ left \ lfloor { \ frac{ { \ mbox { BitsPerPixel } } \ cdot { \ mbox { ImageWidth } } + 三十一 } { 這頂高个三十二個 } } \ right \ rfloor \ cdot 四 , $


_ ImageWidth _ 以像素為單位

像素陣列

這部分逐隻像素表示圖像。逐隻像齋使用一隻抑係幾下隻位元組表示。

一般,像素係對下到頂高、從左到右儲存个。毋過係講用个毋係哦BITMAPCOREHEADER,恁無壓縮个 Windows 點陣圖還做得從上到下儲存,這時節圖像高度係負值。

每一擺个末尾通過填充係干隻位元組个資料(並無一定為零)使該做得長度係四位元組个倍數。像素陣列讀入記憶體了後,每一行个開始个位所愛為四个倍數。這個限制單淨針對記憶體當中个像素陣列,針對儲存時,淨要求每一行个大細為四位元組个倍數,對檔案个偏移無限制吔。

比將講:對二十四位元色个點陣圖,係講厥个寬度做一像素,該恁仔除忒逐間个資料(藍色、綠色、紅)需要占三位元組以外,還會填充一位元組;還過假使闊做二像素,斯需要愛兩位元組个填充;闊做三像素个時節,需要三位元組來填充;闊做四像素个時節無需要填充。

圖像共樣个條件下,點圖檔一般比使用其他壓縮演算法个圖檔大當多。

縮減

索引色个圖像可以使用四位元或者係八位元 RLE 或者係霍夫曼一 D 演算法壓縮。

OS / 二 BITMAPCOREHEADER 二二十四位元色个圖像可以使用二十四位元 RLE 演算法壓縮。

十六位元色摎三十二位元色圖像始終為無壓縮資料。

係講需要,任何色深个圖像都做得無壓縮个形式儲存。

像素格式

無論係磁碟項个點陣圖檔案還係記憶體中个點陣圖像,像素都係由一組位(英語:bit)表示。

  • 逐位就占一儕(色深為一位,一 bpp)个格式支援兩種無共樣个色。像素值直接對應一個位仔个值,盡左像素對應第一隻位元組个最高位仔。使用該位个值用來對色表个索引:係零表示色表裡背个頭一項,係一表示色表裡背个第二項(就係最尾一項)。
  • 逐位就有兩儕(色深深兩位,二 bpp)个格式支持援助四種無共樣个色目。每一隻位元組對應著四個像素,盡左像素係盡高个兩位(單淨在 Windows CE 中有效)。 需要使用像素值來對一張含有四隻色值个色表進行索引。
  • 看起來占了四位元(色深為四位元,四 bpp)个格式支援十六種無共樣个色目。每一隻位元組對應兩隻像素,盡左像素係盡高个四位。需要使用像素值來對一張含有十六隻色值个色表進行索引。* 逐擺就占了八個銀(色深為八位元,八 bpp)个格式支援兩百五十六種無共樣个色。每一隻位元組對應一隻像素。需要使用像素值來著一張含有兩百五十六隻色值个色表進行索引。
  • 係每一張寫吔十六個銀(色深係十六位元,十六 bpp)个格式支援六齣五千五百三十六種無共樣个色,有兩隻位元組(byte)對應一個像齋。該像齋个毋透明度(英語:alpha)、 紅、綠色、青採樣值就存在該二隻位元組當中。
  • 逐像素有二十四個銀(色深係二十四位元,二十四 bpp)个格式支援一千六百七十七十六種个色,每三個位元組對應著一個像素。
  • 像素占三十二儕元(色深為三十二位元,這頂高个三十二個 bpp)个格式支援四十二十二九千四百九十六齣七千二百九十六種無共樣个色目,每四個位元組對應一個像素。

為著區分一個色值中个哪兜位表示哪種採樣值,DIB 頭那分別來設置歸套預設計畫,同時乜做得來使用 BITFIELDS 同某組位指定做為像齋中个某一個通道。

其他

雖然檔案大細加較大,但係點陣圖檔案个簡單性、在微軟視窗仔同其他地方个廣泛使用還過這種格式个優秀个文件標準還過無專利約束,分其他作業系統圖像處理程式做得讀寫个一種最輒常用个格式。

X Window System 使用共樣个. XBM格式表示一位烏白个圖像還有. XPMpixelmap)表示彩色个圖像。另外還有一種. RAW格式,佢除忒儲存原始資料以外無任何其他个資訊。其他還有 Portable Pixmap file format(. PPM)摎 Truevision TGA(. TGA), 毋過佢等用个蓋少抑算用特殊目的。做你其他个格式也儲存著「點陣圖」(摎量圖無共樣), 毋過佢兜用个資料壓縮抑係色索引,故所佢這兜毋係嚴格意義項个點陣圖。

因為包含抽間个資訊,當多 BMP 檔案使用像係類似 ZIP 恁樣个無失真資料壓縮演算法做得取得異好个壓縮效果。

參見

  • 圖檔格式較
  • Windows Picture and Fax Viewer

參考文獻

  • FengYuan:《 Windows Graphics Programming—— Win 這頂高个三十二個 GDI and DirectDraw》,Prentice Hall PTR,一 st ed .,二千七百五十二擺,ISBN : 十三十五八十二九 , 一千兩百三十四 pages . Chapter 十 : Bitmap Basics ; Chapter 十一 : AdvancedBitmap Graphics ; Chapter 十二 : Image Processing Using Windows Bitmaps ;

外部連結

  • Microsoft's MSDN page on Bitmaps
  • Bitmap Storage Explanation
  • Bitmap File Structure
  • An introduction to DIBs ( Device Independent Bitmaps )
  • Example BMP images with various internal formats
  • Turbo C + + 三章零 Code to open 十六 -color bitmaps in DOS
  • 點陣圖(Bitmap)檔案格式 by chiapei