Hva er en BMP-fil?
Filer med filtypen .BMP representerer Bitmap Image-filer som brukes til å lagre bitmap digitale bilder. Disse bildene er uavhengige av grafikkort og kalles også enhetsuavhengig bitmap (DIB) filformat. Denne uavhengigheten tjener formålet med å åpne filen på flere plattformer som Microsoft Windows og Mac. BMP-filformatet kan lagre data som todimensjonale digitale bilder i både monokrom og fargeformat med ulike fargedybder.
BMP-filformatspesifikasjoner
Enhetsuavhengige bitmaps fungerer som en hjelp til å utveksle punktgrafikk mellom enheter og applikasjoner. På grunn av den kontinuerlige utviklingen av dette filformatet, kan informasjonen i overskriftene være forskjellig i henhold til versjonen av Bitmap. En enkelt punktgrafikkfil består av faste så vel som strukturer av variabel størrelse i en bestemt sekvens.
Strukturer i en bitmap-fil er ordnet i følgende rekkefølge:
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 |
Når et punktgrafikkbilde lastes inn i minnet, blir det en DIB-struktur, brukt av Windows via GDI API. Filoverskriften er ikke en del av denne datastrukturen. Fargen kan også bestå av 16-bits oppføringer som utgjør indekser til paletten som for øyeblikket refereres til i stedet for eksplisitte RGB-fargedefinisjoner. La oss ta en titt på noen av disse i detalj, spesielt overskriftene.
Bitmap filoverskrift
En Bitmap File Header ligner på andre filhoder som brukes til å identifisere filen. Siden det er forskjellige varianter av BMP-filformat, er de første 2 bytene av BMP-filformatet tegnet “B” og deretter tegnet “M” i ASCII-koding. Alle heltallsverdier er lagret i little-endian-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 (punktgrafikkinformasjonshode)
Den detaljerte informasjonen om bildet er representert av denne overskriften. Basert på denne informasjonen, vil programmet bli bestemt som skal brukes til å vise bildet på skjermen. Alle slike overskrifter inneholder et DWORD-felt (32-bit) som spesifiserer størrelsen, slik at en applikasjon enkelt kan bestemme overskriften som brukes i bildet. Dette skyldes i utgangspunktet at DIB-formatet gjennomgikk flere utvidelser. Følgende er DIB-overskriften med oppførte felt.
Fargepalett
En BMP-fargepalett er en rekke strukturer som spesifiserer RGB-intensitetsverdiene for hver farge i en skjermenhets fargepalett. Hver piksel i punktgrafikkdataene lagrer en enkelt verdi brukt som en indeks i fargepaletten. Fargeinformasjonen som er lagret i elementet ved den indeksen, spesifiserer fargen på den pikselen. Tilgjengeligheten av farger i en punktgrafikkfil varierer som følger:
- En, 4 og 8-bit - forventes alltid å inneholde en fargepalett
- Seksten, 24 og 32-bit - inneholder aldri fargepaletter
- Seksten og 32-biters BMP-filer - inneholder bitfeltmaskeverdier i stedet for fargepaletten
Pixel Storage
Bitmappiksler lagres som biter pakket i rader der størrelsen på hver rad rundes opp til et multiplum av 4 byte (en 32-biters DWORD) ved utfylling. Den totale mengden byte som kreves for å lagre pikslene i et bilde kan ikke beregnes direkte ved å bare telle bitene. Siden det er polstring involvert, er effekten av å runde opp størrelsen på hver rad til et multiplum av 4 byte nødvendig.Utfyllingsbyte (ikke nødvendigvis 0) skal legges til på slutten av radene for å få opp lengden på radene til et multiplum av fire byte. Når pikselmatrisen er lastet inn i minnet, må hver rad begynne på en minneadresse som er et multiplum av 4.
Bildet er faktisk beskrevet av 32-biters DWORD-representasjon av pikselmatrisen.Vanligvis lagres piksler “nedenfra og opp”, starter i nedre venstre hjørne, går fra venstre til høyre, og deretter rad for rad fra bunnen til toppen av bildet. Pikselformater og deres implikasjoner er som listet nedenfor:
- 1-bit per piksel (1bpp)-formatet støtter 2 forskjellige farger, (for eksempel: svart og hvitt).
- 2-bit per piksel (2bpp)-formatet støtter 4 forskjellige farger og lagrer 4 piksler per 1 byte, den lengst til venstre er i de to mest signifikante bitene. Hver pikselverdi er en 2-bits indeks i en tabell med opptil 4 farger.
- 4-biters per piksel (4bpp)-formatet støtter 16 forskjellige farger og lagrer 2 piksler per 1 byte, den lengste venstre pikselen er i den mer signifikante biten.Hver pikselverdi er en 4-biters indeks i en tabell med opptil 16 farger.
- 8-biters per piksel (8bpp)-formatet støtter 256 forskjellige farger og lagrer 1 piksel per 1 byte. Hver byte er en indeks i en tabell med opptil 256 farger.
- 16-biters per piksel (16bpp)-formatet støtter 65536 forskjellige farger og lagrer 1 piksel per 2-byte WORD. Hvert ORD kan definere de alfa-, røde, grønne og blå eksemplene av pikselen.
- 24-bits pikselformatet (24bpp) støtter 16 777 216 forskjellige farger og lagrer 1 pikselverdi per 3 byte. Hver pikselverdi definerer de røde, grønne og blå prøvene av pikselen (8.8.8.0.0 i RGBAX-notasjon). Nærmere bestemt i rekkefølgen: blå, grønn og rød (8 biter per prøve).
- 32-biters per piksel (32bpp)-formatet støtter 4 294 967 296 forskjellige farger og lagrer 1 piksel per 4-byte DWORD. Hver DWORD kan definere alfa, rød, grønn og blå prøve av pikselen.