File Format Docs
NO

BMP - Image File Format

Oppdatert

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:

StructureOptionalSizePurpose
File HeaderNo14To store general information about the bitmap image file
DIB HeaderNoFixed-SizeTo store detailed information about the bitmap image and define the pixel format
Extra Bit MasksYes12 or 16 bytesTo define the pixel format
Colour PaletteSemi-optionalVariable-sizeTo define colours used by the bitmap image data
Gap1YesVariable-sizeStructure alignment
Pixel ArrayNoVariable-sizePixel format is defined by the DIB header or Extra bit masks.
Gap2YesVariable-sizeStructure alignment
ICC Color profileYesVariable-sizeTo 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 hexOffset decSizePurpose
0002 bytesThe 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
0224 bytesThe size of the BMP file in bytes
0662 bytesReserved; actual value depends on the application that creates the image
0882 bytesReserved; actual value depends on the application that creates the image
0A104 bytesThe 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.

Referanser

Se også