Ano ang BMP file?
Ang mga file na may extension na .BMP ay kumakatawan sa mga Bitmap Image file na ginagamit upang mag-imbak ng mga digital na imahe ng bitmap. Ang mga larawang ito ay hiwalay sa graphics adapter at tinatawag ding device independent bitmap (DIB) na format ng file. Ang pagsasarili na ito ay nagsisilbi sa layunin ng pagbubukas ng file sa maraming platform gaya ng Microsoft Windows at Mac. Ang format ng BMP file ay maaaring mag-imbak ng data bilang dalawang-dimensional na mga digital na imahe sa parehong monochrome pati na rin ang format ng kulay na may iba’t ibang lalim ng kulay.
Mga Detalye ng BMP File Format
Ang Device Independent Bitmaps ay nagsisilbing tulong sa pagpapalitan ng mga bitmap sa pagitan ng mga device at application. Dahil sa patuloy na ebolusyon ng format ng file na ito, ang impormasyong nakapaloob sa mga header ay maaaring magkakaiba ayon sa bersyon ng Bitmap. Ang nag-iisang bitmap file ay binubuo ng nakapirming pati na rin ng mga variable-size na istruktura sa isang partikular na pagkakasunod-sunod.
Ang mga istruktura sa isang Bitmap file ay nakaayos sa sumusunod na pagkakasunud-sunod:
Structure | Optional | Size | Purpose |
---|---|---|---|
File Header | No | 14 | To store general information about the bitmap image file |
DIB Header | No | Fixed-Size | To store detailed information about the bitmap image and define the pixel format |
Extra Bit Masks | Yes | 12 or 16 bytes | To define the pixel format |
Colour Palette | Semi-optional | Variable-size | To define colours used by the bitmap image data |
Gap1 | Yes | Variable-size | Structure alignment |
Pixel Array | No | Variable-size | Pixel format is defined by the DIB header or Extra bit masks. |
Gap2 | Yes | Variable-size | Structure alignment |
ICC Color profile | Yes | Variable-size | To define the colour profile for colour management |
Kapag ang isang bitmap na imahe ay na-load sa memorya, ito ay nagiging isang istruktura ng DIB, na ginagamit ng Windows sa pamamagitan ng GDI API nito. Ang file header ay hindi bahagi ng istruktura ng data na ito. Ang kulay ay maaari ding binubuo ng 16-bit na mga entry na bumubuo ng mga index sa kasalukuyang naka-reference na palette sa halip na tahasang mga kahulugan ng kulay ng RGB. Tingnan natin nang detalyado ang ilan sa mga ito, lalo na ang mga header.
Bitmap File Header
Ang isang Bitmap File Header ay katulad ng iba pang mga header ng file na ginamit upang makilala ang file. Dahil may iba’t ibang variant sa BMP file format, ang unang 2 byte ng BMP file format ay character na “B” at pagkatapos ay character na “M” sa ASCII encoding. Ang lahat ng mga halaga ng integer ay naka-imbak sa maliit na-endian na format.
Offset hex | Offset dec | Size | Purpose |
---|---|---|---|
00 | 0 | 2 bytes | The header field used to identify the BMP and DIB file is 0x42 0x4D in hexadecimal, same as BM in ASCII. It can following possible values.* BM – Windows 3.1x, 95, NT, … etc. * BA – OS/2 struct bitmap array * CI – OS/2 struct color icon * CP – OS/2 const color pointer * IC – OS/2 struct icon * PT – OS/2 pointer |
02 | 2 | 4 bytes | The size of the BMP file in bytes |
06 | 6 | 2 bytes | Reserved; actual value depends on the application that creates the image |
08 | 8 | 2 bytes | Reserved; actual value depends on the application that creates the image |
0A | 10 | 4 bytes | The offset, i.e. starting address, of the byte where the bitmap image data (pixel array) can be found. |
DIB header (bitmap information header)
Ang detalyadong impormasyon tungkol sa larawan ay kinakatawan ng header na ito. Batay sa impormasyong ito, matutukoy ang application na gagamitin upang ipakita ang larawan sa screen. Ang lahat ng naturang mga header ay naglalaman ng isang DWORD (32-bit) na patlang, na tumutukoy sa kanilang laki, upang ang isang application ay madaling matukoy ang header na ginamit sa larawan. Ito ay karaniwang dahil sa katotohanan na ang format ng DIB ay sumailalim sa ilang mga extension. Ang sumusunod ay ang DIB Header na may mga nakalistang field.
Color Palette
Ang palette ng kulay ng BMP ay isang hanay ng mga istruktura na tumutukoy sa mga value ng intensity ng RGB ng bawat kulay sa color palette ng isang display device. Ang bawat pixel sa data ng bitmap ay nag-iimbak ng isang value na ginamit bilang index sa color palette. Ang impormasyon ng kulay na nakaimbak sa elemento sa index na iyon ay tumutukoy sa kulay ng pixel na iyon. Ang pagkakaroon ng kulay sa isang bitmap na file ay nag-iiba gaya ng sumusunod:
- One, 4 and 8-bit - expected to always contain a colour palette
- Sixteen, 24 and 32-bit - never contain colour palettes
- Sixteen and 32-bit BMP files - contain bitfields mask values in place of the colour palette
Imbakan ng Pixel
Ang mga bitmap pixel ay iniimbak bilang mga bit na naka-pack sa mga row kung saan ang laki ng bawat row ay bini-round up sa isang multiple na 4 byte (isang 32-bit DWORD) sa pamamagitan ng padding. Ang kabuuang halaga ng mga byte na kinakailangan upang maimbak ang mga pixel ng isang imahe ay hindi maaaring direktang kalkulahin sa pamamagitan lamang ng pagbibilang ng mga bit. Dahil may kasamang padding, kinakailangan ang epekto ng pag-ikot ng laki ng bawat row sa maramihang 4 na byte.Ang mga padding byte (hindi kinakailangang 0) ay idaragdag sa dulo ng mga row upang maitaas ang haba ng mga row sa isang multiple ng apat na byte. Kapag ang pixel array ay na-load sa memorya, ang bawat row ay dapat magsimula sa isang memory address na multiple ng 4.
Ang imahe ay aktwal na inilarawan ng 32-bit na DWORD na representasyon ng pixel array.Karaniwang iniimbak ang mga pixel “bottom-up”, simula sa ibabang kaliwang sulok, mula kaliwa hanggang kanan, at pagkatapos ay hilera sa bawat hilera mula sa ibaba hanggang sa itaas ng larawan. Ang mga format ng pixel at ang mga implikasyon ng mga ito ay nakalista sa ibaba:
- Ang 1-bit per pixel (1bpp) na format ay sumusuporta sa 2 natatanging kulay, (halimbawa: itim at puti).
- Ang 2-bit per pixel (2bpp) na format ay sumusuporta sa 4 na magkakaibang kulay at nag-iimbak ng 4 na pixel bawat 1 byte, ang pinakakaliwang pixel ay nasa dalawang pinaka makabuluhang bit. Ang bawat halaga ng pixel ay isang 2-bit na index sa isang talahanayan na may hanggang 4 na kulay.
- Ang 4-bit per pixel (4bpp) na format ay sumusuporta sa 16 na natatanging kulay at nag-iimbak ng 2 pixel bawat 1 byte, ang kaliwang pixel ay nasa mas makabuluhang nibble.Ang bawat halaga ng pixel ay isang 4-bit na index sa isang talahanayan na may hanggang 16 na kulay.
- Ang 8-bit per pixel (8bpp) na format ay sumusuporta sa 256 natatanging kulay at nag-iimbak ng 1 pixel bawat 1 byte. Ang bawat byte ay isang index sa isang talahanayan na may hanggang 256 na kulay.
- Ang 16-bit per pixel (16bpp) na format ay sumusuporta sa 65536 natatanging kulay at nag-iimbak ng 1 pixel bawat 2-byte na WORD. Maaaring tukuyin ng bawat WORD ang alpha, pula, berde at asul na mga sample ng pixel.
- Ang 24-bit pixel (24bpp) na format ay sumusuporta sa 16,777,216 natatanging kulay at nag-iimbak ng 1 pixel na halaga sa bawat 3 byte. Ang bawat pixel value ay tumutukoy sa pula, berde at asul na mga sample ng pixel (8.8.8.0.0 sa RGBAX notation). Sa partikular, sa pagkakasunud-sunod: asul, berde at pula (8 bits bawat sample).
- Ang 32-bit per pixel (32bpp) na format ay sumusuporta sa 4,294,967,296 natatanging kulay at nag-iimbak ng 1 pixel bawat 4-byte na DWORD. Maaaring tukuyin ng bawat DWORD ang alpha, pula, berde at asul na mga sample ng pixel.