BMP-filformat

Windows Bitmap
Filnamnstillägg
.bmp , .dib
Internet mediatyp
bild/bmp bild/x-bmp
Skriv kod

'BMP' 'BMPf' 'BMPp'
Uniform Type Identifier (UTI) com.microsoft.bmp
Utvecklad av Microsoft Corporation
Typ av format Raster grafik
Öppna format ? OSP för WMF

BMP -filformatet eller bitmapp , är ett rastergrafikbildfilformat som används för att lagra digitala bitmappsbilder , oberoende av visningsenheten (som en grafikadapter ), särskilt på Microsoft Windows och OS/2 operativsystem.

BMP-filformatet kan lagra tvådimensionella digitala bilder i olika färgdjup , och valfritt med datakomprimering , alfakanaler och färgprofiler . Windows Metafile (WMF)-specifikationen täcker BMP-filformatet.

Enhetsoberoende bitmappar och BMP-filformatet

Diagram 1 – The structure of the bitmap image file
Diagram 1 – Strukturen för bitmappsbildfilen

Microsoft har definierat en särskild representation av färgbitmappar med olika färgdjup, som ett hjälpmedel för att utbyta bitmappar mellan enheter och applikationer med en mängd olika interna representationer. De kallade dessa enhetsoberoende bitmappar eller DIB, och filformatet för dem kallas DIB-filformat eller BMP-bildfilformat.

Enligt Microsofts support:

En enhetsoberoende bitmapp (DIB) är ett format som används för att definiera enhetsoberoende bitmappar i olika färgupplösningar. Huvudsyftet med DIB:er är att tillåta att bitmappar flyttas från en enhet till en annan (därav den enhetsoberoende delen av namnet). En DIB är ett externt format, till skillnad från en enhetsberoende bitmapp, som visas i systemet som ett bitmappsobjekt (skapat av en applikation...). En DIB transporteras normalt i metafiler (vanligtvis med funktionen StretchDIBits()), BMP-filer och urklipp ( dataformat CF_DIB ).

Följande avsnitt diskuterar data som lagras i BMP-filen eller DIB i detalj. Detta är standard BMP-filformat. Vissa applikationer skapar bitmappsbildfiler som inte är kompatibla med Microsofts dokumentation. Dessutom används inte alla fält; ett värde på 0 kommer att hittas i dessa oanvända fält.

Filstruktur

Bitmappsbildfilen består av strukturer med fast storlek (rubriker) såväl som strukturer med variabel storlek som visas i en förutbestämd sekvens. Många olika versioner av vissa av dessa strukturer kan förekomma i filen, på grund av den långa utvecklingen av detta filformat.

Med hänvisning till diagram 1, är bitmappsfilen sammansatt av strukturer i följande ordning:

Strukturens namn Frivillig Storlek Syfte Kommentarer
Bitmappsfilhuvud Nej 14 byte För att lagra allmän information om bitmappsbildfilen Behövs inte efter att filen har laddats i minnet
DIB-huvud Nej
Fast storlek (7 olika versioner finns)
För att lagra detaljerad information om bitmappsbilden och definiera pixelformatet Följer omedelbart bitmappsfilens rubrik
Extra bitmasker Ja
3 eller 4 DWORDs (12 eller 16 byte)
För att definiera pixelformatet Finns endast om DIB-huvudet är BITMAPINFOHEADER och komprimeringsmetodmedlemmen är inställd på antingen BI_BITFIELDS eller BI_ALPHABITFIELDS
Färgtabell Semi-valfritt Variabel storlek För att definiera färger som används av bitmappsbilddata (Pixel array) Obligatorisk för färgdjup ≤ 8 bitar
Gap 1 Ja Variabel storlek Strukturinriktning En artefakt av filförskjutningen till pixelmatrisen i bitmappsfilhuvudet
Pixel array Nej Variabel storlek För att definiera de faktiska värdena för pixlarna Pixelformatet definieras av DIB-huvudet eller extra bitmasker. Varje rad i Pixel-arrayen är vadderad till en multipel av 4 byte i storlek
Gap 2 Ja Variabel storlek Strukturinriktning En artefakt av ICC-profildataoffsetfältet i DIB-huvudet
ICC färgprofil Ja Variabel storlek För att definiera färgprofilen för färghantering Kan också innehålla en sökväg till en extern fil som innehåller färgprofilen. När den laddas i minnet som "icke-packad DIB", ligger den mellan färgtabellen och Gap1.

DIB i minnet

En bitmappsbildfil som laddas in i minnet blir en DIB-datastruktur – en viktig komponent i Windows GDI API. DIB-datastrukturen i minnet är nästan densamma som BMP-filformatet, men den innehåller inte 14-byte bitmappsfilhuvudet och börjar med DIB-huvudet. För DIB:er som laddas i minnet kan färgtabellen också bestå av 16-bitars poster som utgör index till den för närvarande realiserade paletten (en ytterligare nivå av inriktning), istället för explicita RGB-färgdefinitioner. I alla fall måste pixelmatrisen börja vid en minnesadress som är en multipel av 4 byte. I icke-packade DIB:er inlästa i minnet, bör de valfria färgprofildata placeras omedelbart efter färgtabellen och före gap1 och pixel array (till skillnad från bild 1).


När storleken på gap 1 och gap2 är noll, hänvisas vanligen till DIB-datastrukturen i minnet som "packad DIB" och kan refereras till med en enda pekare som pekar mot början av DIB-huvudet. I alla fall måste pixelmatrisen börja vid en minnesadress som är en multipel av 4 byte. I vissa fall kan det vara nödvändigt att justera antalet poster i färgtabellen för att tvinga minnesadressen för pixelmatrisen till en multipel av 4 byte. För "packade DIB:er" inlästa i minnet bör de valfria färgprofildata omedelbart följa pixelmatrisen, som visas i bild. 1 (med gap1=0 och gap2=0). "Packade DIB:er" krävs av Windows urklipps API-funktioner såväl som av vissa Windows-mönstrade borst- och resursfunktioner.

Bitmappsfilhuvud

Detta block av byte är i början av filen och används för att identifiera filen. Ett typiskt program läser detta block först för att säkerställa att filen faktiskt är en BMP-fil och att den inte är skadad. De första 2 byten i BMP-filformatet är tecknet "B" och sedan tecknet "M" i ASCII -kodning. Alla heltalsvärden lagras i little-endian -format (dvs minst signifikant byte först).

Offset hex Offset dec Storlek Syfte
00 0 2 byte Rubrikfältet som används för att identifiera BMP- och DIB-filen är 0x42 0x4D i hexadecimal , samma som BM i ASCII. Följande poster är möjliga:
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 pekare
02 2 4 bytes Storleken på BMP-filen i byte
06 6 2 byte Reserverad; Det faktiska värdet beror på applikationen som skapar bilden, om den skapas manuellt kan den vara 0
08 8 2 byte Reserverad; Det faktiska värdet beror på applikationen som skapar bilden, om den skapas manuellt kan den vara 0
0A 10 4 bytes Offset, dvs startadress, för byten där bitmappsbilddata (pixel array) kan hittas.

DIB-huvud (bitmappsinformationshuvud)

Det här blocket med byte ger applikationen detaljerad information om bilden, som kommer att användas för att visa bilden på skärmen. Blocket matchar även headern som används internt av Windows och OS/2 och har flera olika varianter. Alla innehåller ett dword-fält (32-bitars) som anger deras storlek, så att en applikation enkelt kan avgöra vilken rubrik som används i bilden. Anledningen till att det finns olika rubriker är att Microsoft utökat DIB-formatet flera gånger. De nya utökade rubrikerna kan användas med vissa GDI-funktioner istället för de äldre, vilket ger mer funktionalitet. Eftersom GDI stöder en funktion för att ladda bitmappsfiler använder typiska Windows-program den funktionen. En konsekvens av detta är att för sådana applikationer matchar BMP-formaten som de stöder de format som stöds av den Windows-version som körs. Se tabellen nedan för mer information.

Windows och OS/2 bitmappsrubriker
Storlek Rubrikens namn OS-stöd Funktioner Skriven av
12
BITMAPCOREHEADER OS21XBITMAPHEADER

Windows 2.0 eller senare OS/2 1.x
64 OS22XBITMAPHEADER OS/2 BITMAPCOREHEADER 2 Lägger till halvtoning . Lägger till RLE och Huffman 1D-komprimering.
16 OS22XBITMAPHEADER Denna variant av föregående rubrik innehåller endast de första 16 byten och de återstående byten antas vara nollvärden.

Ett exempel på ett sådant fall är grafiken pal8os2v2-16.bmp i BMP Suite.

40 BITMAPINFÖHELARE Windows NT , 3.1x eller senare Utökar bitmappens bredd och höjd till 4 byte. Lägger till formaten 16 bpp och 32 bpp. Lägger till RLE-komprimering.
52 BITMAPV2INFOHEADER Odokumenterad Lägger till RGB-bitmasker. Adobe Photoshop
56 BITMAPV3INFOHEADER Inte officiellt dokumenterad, men denna dokumentation har publicerats på Adobes forum, av en anställd hos Adobe med ett uttalande om att standarden vid ett tillfälle tidigare inkluderades i officiell MS-dokumentation Lägger till alfakanalbitmask . Adobe Photoshop
108 BITMAPV4HEADER Windows NT 4.0 , 95 eller senare Lägger till färgrymdstyp och gammakorrigering
124 BITMAPV5HEADER Windows NT 5.0 , 98 eller senare Lägger till ICC-färgprofiler GIMP
Offset (hexadecimal) Offset (dec) Storlek (byte) OS/2 1.x BITMAPCOREHEADER
0E 14 4 Storleken på denna rubrik (12 byte)
12 18 2 Bitmappsbredden i pixlar (osignerad 16-bitars)
14 20 2 Bitmappshöjden i pixlar (osignerad 16-bitars)
16 22 2 Antalet färgplan måste vara 1
18 24 2 Antalet bitar per pixel
OS/2 1.x bitmappar är okomprimerade och kan inte vara 16 eller 32 bpp.

Windows 2.x BITMAPCOREHEADER skiljer sig från OS/2 1.x BITMAPCOREHEADER (visas i tabellen ovan) i den enda detaljen att bildens bredd- och höjdfält är signerade heltal, inte osignerade.

Versioner efter BITMAPINFOHEADER lägger bara till fält i slutet av rubriken för den tidigare versionen. Till exempel: BITMAPV2INFOHEADER lägger till fält i BITMAPINFOHEADER och BITMAPV3INFOHEADER lägger till fält i BITMAPV2INFOHEADER .

En integrerad alfakanal har introducerats med den odokumenterade BITMAPV3INFOHEADER och med den dokumenterade BITMAPV4HEADER (sedan Windows 95 ) och används inom Windows XP -inloggning och temasystem samt Microsoft Office (sedan v2000); det stöds av vissa bildredigeringsprogram , som Adobe Photoshop sedan version 7 och Adobe Flash sedan version MX 2004 (då känd som Macromedia Flash). Det stöds också av GIMP , Google Chrome , Microsoft PowerPoint och Microsoft Word .

Av kompatibilitetsskäl använder de flesta applikationer de äldre DIB-huvudena för att spara filer. Med OS/2 som inte längre stöds efter Windows 2000, för närvarande är det vanliga Windows-formatet BITMAPINFOHEADER -huvudet. Se nästa tabell för dess beskrivning. Alla värden lagras som heltal utan tecken, om det inte uttryckligen anges.

Offset (hexadecimal) Offset (dec) Storlek (byte) Windows BITMAPINFOHEADER
0E 14 4 storleken på denna rubrik, i byte (40)
12 18 4 bitmappsbredden i pixlar (heltal med tecken)
16 22 4 bitmappshöjden i pixlar (heltal med tecken)
1A 26 2 antalet färgplan (måste vara 1)
1C 28 2 antalet bitar per pixel, vilket är bildens färgdjup. Typiska värden är 1, 4, 8, 16, 24 och 32.
1E 30 4 komprimeringsmetoden som används. Se nästa tabell för en lista över möjliga värden
22 34 4 bildstorleken. Detta är storleken på rå bitmappsdata; en dummy 0 kan ges för BI_RGB bitmappar.
26 38 4 bildens horisontella upplösning. (pixel per meter, heltal med tecken)
2A 42 4 bildens vertikala upplösning. (pixel per meter, heltal med tecken)
2E 46 4 antalet färger i färgpaletten, eller 0 som standard till 2 n
32 50 4 antalet viktiga färger som används, eller 0 när varje färg är viktig; i allmänhet ignoreras

Komprimeringsmetoden (offset 30) kan vara:

Värde Identifierad av Kompressionsmetod Kommentarer
0 BI_RGB ingen Mest vanliga
1 BI_RLE8 RLE 8-bitar/pixel Kan endast användas med 8-bitars/pixel bitmappar
2 BI_RLE4 RLE 4-bitar/pixel Kan endast användas med 4-bitars/pixel bitmappar
3 BI_BITFIELDS OS22XBITMAPHEADER : Huffman 1D
BITMAPV2INFOHEADER : RGB-bitfältsmasker, BITMAPV3INFOHEADER + : RGBA
4 BI_JPEG OS22XBITMAPHEADER : RLE-24 BITMAPV4INFOHEADER + : JPEG- bild för utskrift
5 BI_PNG BITMAPV4INFOHEADER + : PNG -bild för utskrift
6 BI_ALPHABITFIELDS RGBA bitfältsmasker endast Windows CE 5.0 med .NET 4.0 eller senare
11 BI_CMYK ingen endast Windows Metafile CMYK
12 BI_CMYKRLE8 RLE-8 endast Windows Metafile CMYK
13 BI_CMYKRLE4 RLE-4 endast Windows Metafile CMYK

En OS/2 2.x OS22XBITMAPHEADER ( BITMAPINFOHEADER2 i IBMs dokumentation) innehåller ytterligare 24 byte:

Offset (hexadecimal) Offset (dec) Storlek (byte) OS/2 OS22XBITMAPHEADER ( BITMAPINFOHEADER2 )
36 54 2 Ett uppräknat värde som anger enheterna för de horisontella och vertikala upplösningarna (offset 38 och 42). Det enda definierade värdet är 0, vilket betyder pixlar per meter
38 56 2 Stoppning. Ignoreras och bör vara noll
3A 58 2 Ett uppräknat värde som anger i vilken riktning bitarna fyller bitmappen. Det enda definierade värdet är 0, vilket betyder att ursprunget är det nedre vänstra hörnet. Bits fylls från vänster till höger, sedan från botten till toppen.

Observera att Windows bitmappar (som inte inkluderar detta fält) också kan ange ett övre vänstra ursprung (bitar fylls från vänster till höger, sedan uppifrån och ner) genom att använda ett negativt värde för bildhöjden

3C 60 2 Ett uppräknat värde som indikerar en halvtonsalgoritm som ska användas när bilden renderas.
40 64 4 Halvtonsparameter 1 (se nedan)
44 68 4 Halvtonsparameter 2 (se nedan)
48 72 4 Ett uppräknat värde som anger färgkodningen för varje post i färgtabellen. Det enda definierade värdet är 0, vilket indikerar RGB.
4C 76 4 En applikationsdefinierad identifierare. Används inte för bildåtergivning

Halvtonsalgoritmen (offset 60) kan vara:

Värde Halvtonsalgoritm Kommentarer
0 ingen Mest vanliga
1 Felspridning Halvtonsparameter 1 (offset 64) är den procentuella feldämpningen. 100 indikerar ingen dämpning. 0 indikerar att fel inte sprids
2 PANDA: Processing Algorithm for Noncoded Document Acquisition Halvtonsparametrarna 1 och 2 (offset 64 respektive 68) representerar X- och Y-dimensionerna, i pixlar, för det använda halvtonsmönstret
3 Super-cirkel Halvtonsparametrarna 1 och 2 (offset 64 respektive 68) representerar X- och Y-dimensionerna, i pixlar, för det använda halvtonsmönstret

Färgtabell


Färgtabellen (paletten) förekommer i BMP-bildfilen direkt efter BMP-filhuvudet, DIB-huvudet och efter de valfria tre eller fyra bitmaskerna om alternativet BITMAPINFOHEADER med BI_BITFIELDS (12 byte) eller BI_ALPHABITFIELDS (16 byte) används . Därför är dess offset storleken på BITMAPFILEHEADER plus storleken på DIB-huvudet (plus valfria 12-16 byte för de tre eller fyra bitars maskerna). Obs: I Windows CE kan BITMAPINFOHEADER - huvudet användas med alternativet BI_ALPHABITFIELDS i biCompression-medlemmen.

Antalet poster i paletten är antingen 2 n (där n är antalet bitar per pixel) eller ett mindre antal som anges i rubriken (i OS/2 BITMAPCOREHEADER -rubrikformatet stöds endast paletten i full storlek). I de flesta fall upptar varje post i färgtabellen 4 byte, i ordningen blå, grön, röd, 0x00 (se nedan för undantag). Detta indexeras i BITMAPINFOHEADER i strukturmedlemmen biBitCount.

Färgtabellen är ett block av byte (en tabell) som listar färgerna som används av bilden. Varje pixel i en indexerad färgbild beskrivs av ett antal bitar (1, 4 eller 8), vilket är ett index för en enskild färg som beskrivs i denna tabell. Syftet med färgpaletten i indexerade färgbitmappar är att informera applikationen om den faktiska färgen som vart och ett av dessa indexvärden motsvarar. Syftet med färgtabellen i icke-indexerade (icke-palettiserade) bitmappar är att lista de färger som används av bitmappen i syfte att optimera på enheter med begränsad färgvisningskapacitet och för att underlätta framtida konvertering till olika pixelformat och palettisering.

Färgerna i färgtabellen anges vanligtvis i RGBA32- formatet 4-byte per post. Färgtabellen som används med OS/2 BITMAPCOREHEADER använder 3-byte per post RGB24 -format. För DIB:er laddade i minnet kan färgtabellen valfritt bestå av 2-byte-poster – dessa poster utgör index till den för närvarande realiserade paletten istället för explicita RGB-färgdefinitioner.

Microsoft tillåter inte närvaron av en giltig alfakanalbitmask i BITMAPV4HEADER och BITMAPV5HEADER för 1bpp, 4bpp och 8bpp indexerade färgbilder, vilket indikerar att färgtabellsposterna också kan specificera en alfakomponent med hjälp av 8.8.8.[ 0-8 ].[0-8] format via RGBQUAD.rgbReserved medlem. Vissa versioner av Microsofts dokumentation tillåter dock inte denna funktion genom att säga att RGBQUAD.rgbReserved-medlemmen "måste vara noll".

Som nämnts ovan används färgtabellen normalt inte när pixlarna är i formatet 16-bitar per pixel (16bpp) (och högre); det finns normalt inga färgtabellsposter i dessa bitmappsbildfiler. Microsofts dokumentation (på MSDN-webbplatsen den 16 november 2010) anger dock att för 16 bpp (och högre) kan färgtabellen finnas tillgänglig för att lagra en lista över färger avsedda för optimering på enheter med begränsad färgvisningskapacitet , samtidigt som det också anger att det i sådana fall inte finns några indexerade palettposter i denna färgtabell. Detta kan verka som en motsägelse om ingen skillnad görs mellan de obligatoriska palettposterna och den valfria färglistan.

Pixellagring

Bitarna som representerar bitmappspixlarna är packade i rader (även känd som steg eller skanningslinjer). Storleken på varje rad avrundas uppåt till en multipel av 4 byte (ett 32-bitars DWORD ) genom utfyllnad.

För bilder med en höjd över 1 lagras flera vadderade rader i följd och bildar en Pixel Array.

Det totala antalet byte som krävs för att lagra en rad med pixlar kan beräknas som:

ImageWidth uttrycks i pixlar. Ekvationen ovan använder golv- och takfunktionerna .

Det totala antalet byte som krävs för att lagra en array av pixlar i en n bitar per pixel (bpp) bild, med 2 n färger, kan beräknas genom att ta hänsyn till effekten av att runda upp storleken på varje rad till en multipel av 4 byte , som följer:

ImageHeight uttrycks i pixlar. Det absoluta värdet är nödvändigt eftersom ImageHeight uttrycks som ett negativt tal för bilder uppifrån och ned.

Pixel array (bitmappsdata)

Pixelmatrisen är ett block av 32-bitars DWORD, som beskriver bilden pixel för pixel. Vanligtvis lagras pixlar "nedifrån och upp", med början i det nedre vänstra hörnet, från vänster till höger och sedan rad för rad från botten till toppen av bilden. Om inte BITMAPCOREHEADER används, kan okomprimerade Windows-bitmappar också lagras uppifrån och ned, när värdet för bildhöjd är negativt.

I den ursprungliga OS/2 DIB var de enda fyra lagliga värdena för färgdjup 1, 4, 8 och 24 bitar per pixel (bpp). Samtida DIB-huvuden tillåter pixelformat med 1, 2, 4, 8, 16, 24 och 32 bitar per pixel (bpp). GDI+ tillåter också 64 bitar per pixel.

Utfyllnadsbyte (inte nödvändigtvis 0) måste läggas till i slutet av raderna för att få upp längden på raderna till en multipel av fyra byte. När pixelmatrisen laddas in i minnet måste varje rad börja på en minnesadress som är en multipel av 4. Denna adress-/offsetbegränsning är endast obligatorisk för Pixelmatriser som laddas i minnet. För fillagringsändamål måste endast storleken på varje rad vara en multipel av 4 byte medan filförskjutningen kan vara godtycklig. En 24-bitars bitmapp med Width=1 skulle ha 3 byte data per rad (blå, grön, röd) och 1 byte utfyllnad, medan Width=2 skulle ha 6 byte data och 2 byte utfyllnad, Width=3 skulle ha 9 byte data och 3 byte utfyllnad, och Width=4 skulle ha 12 byte data och ingen utfyllnad.

Kompression

  • Indexerade färgbilder kan komprimeras med 4-bitars eller 8-bitars RLE eller Huffman 1D-algoritm.
  • OS/2 BITMAPCOREHEADER 2 24bpp- bilder kan komprimeras med 24-bitars RLE-algoritmen.
  • 16bpp- och 32bpp - bilderna lagras alltid okomprimerade.
  • Observera att bilder i alla färgdjup kan lagras utan komprimering om så önskas.

Pixelformat

  • Formatet 1 bit per pixel (1 bpp) stöder 2 olika färger (till exempel: svart och vitt). Pixelvärdena lagras i varje bit, med den första (längst till vänster) pixeln i den mest signifikanta biten i den första byten. Varje bit är ett index i en tabell med 2 färger. En oinställd bit kommer att hänvisa till den första färgtabellposten, och en inställd bit kommer att hänvisa till den sista (andra) färgtabellposten.
  • Formatet 2-bitar per pixel (2bpp) stöder 4 distinkta färger och lagrar 4 pixlar per 1 byte, där den längst till vänster finns i de två mest signifikanta bitarna (endast Windows CE :) . Varje pixelvärde är ett 2-bitars index i en tabell med upp till 4 färger.
  • 4-bitars per pixel (4bpp)-formatet stöder 16 distinkta färger och lagrar 2 pixlar per 1 byte, den längst till vänster är i den mer signifikanta biten . Varje pixelvärde är ett 4-bitars index i en tabell med upp till 16 färger.
  • Formatet 8-bitar per pixel (8bpp) stöder 256 distinkta färger och lagrar 1 pixel per 1 byte. Varje byte är ett index i en tabell med upp till 256 färger.
  • Formatet 16-bitar per pixel (16bpp) stöder 65536 distinkta färger och lagrar 1 pixel per 2-byte WORD. Varje ORD kan definiera alfa, röda, gröna och blå prover av pixeln.
  • Formatet 24-bitar per pixel (24bpp) stöder 16 777 216 distinkta färger och lagrar 1 pixelvärde per 3 byte. Varje pixelvärde definierar de röda, gröna och blå samplen av pixeln (8.8.8.0.0 i RGBAX-notation). Specifikt i ordningen: blå, grön och röd (8 bitar per varje prov).
  • Formatet 32-bitar per pixel (32bpp) stöder 4 294 967 296 distinkta färger och lagrar 1 pixel per 4-byte DWORD. Varje DWORD kan definiera alfa, röda, gröna och blå prover av pixeln.

För att lösa tvetydigheten i vilka bitar som definierar vilka sampel, tillhandahåller DIB-huvudena vissa standardvärden såväl som specifika BITFIELDS, som är bitmasker som definierar medlemskapet av en viss grupp av bitar i en pixel till en viss kanal . Följande diagram definierar denna mekanism:

Diag. 2 – The BITFIELDS mechanism for a 32-bit pixel depicted in RGBAX sample length notation
Diag. 2 – BITFIELDS-mekanismen för en 32-bitars pixel avbildad i RGBAX-provlängdsnotation

Sampelfälten som definieras av BITFIELDS-bitmaskerna måste vara sammanhängande och icke-överlappande, men ordningen på sampelfälten är godtycklig. Den mest förekommande fältordningen är: Alfa, Blå, Grön, Röd (MSB till LSB). De röda, gröna och blå bitmaskerna är endast giltiga när kompressionsmedlemmen i DIB-huvudet är inställd på BI_BITFIELDS. Alfabitmasken är giltig när den finns i DIB-huvudet eller när kompressionsmedlemmen i DIB-huvudet är inställt på BI_ALPHABITFIELDS ( endast Windows CE ).

Diag. 3 – The pixel format with an alpha channel for a 16-bit pixel (in RGBAX sample Length notation) actually generated by Adobe Photoshop[22]
Diag. 3 – Pixelformatet med en alfakanal för en 16-bitars pixel (i RGBAX sample Length notation) som faktiskt genereras av Adobe Photoshop
All of the possible pixel formats in a DIB
Alla möjliga pixelformat i en DIB

RGB-videoundertyper

BITFIELD-mekanismen som beskrivs ovan tillåter definitionen av tiotusentals olika pixelformat, men endast flera av dem används i praktiken, alla palettiserade format RGB8, RGB4 och RGB1 (markerade med gult i tabellen ovan, definierade i dshow.h .MEDIASUBTYPE-namn):

Okomprimerade RGB-videoundertyper
RGBAX RGB-undertyp RGBAX ARGB-undertyp
8.8.8.0.8 RGB32 8.8.8.8.0 ARGB32
10.10.10.2.0 A2R10G10B10
8.8.8.0.0 RGB24 10.10.10.2.0 A2B10G10R10
5.6.5.0.0 RGB565 4.4.4.4.0 ARGB4444
5.5.5.0.1 RGB555 5.5.5.1.0 ARGB1555
Bitfält för tio RGB-bitar
Bitfält Offset Bits A2R10G10B10 Bits A2B10G10R10
Röd 36h 00 00 F0 3F LE: 3FF00000 20 29 FF 03 00 00 LE: 000003FF  0 9
Grön 3 Ah 00 FC 0F 00 LE: 000FFC00 10 19 00 FC 0F 00 LE: 000FFC00 10 19
Blå 3 Eh FF 03 00 00 LE: 000003FF  0 9 00 00 F0 3F LE: 3FF00000 20 29
Alfa 42h 00 00 00 C0 LE: C0000000 30 31 00 00 00 C0 LE: C0000000 30 31

I version 2.1.4 stödde FFmpeg (i sin egen terminologi) BMP-pixelformaten bgra, bgr24, rgb565le, rgb555le, rgb444le, rgb8, bgr8, rgb4_byte, bgr4_byte, grey, pal 8 och monob pal ; dvs. bgra var det enda stödda pixelformatet med transparens.

Exempel 1 på en 2×2 pixel bitmapp, med 24 bitar/pixelkodning

Exempel 1

Följande är ett exempel på en 2×2 pixel, 24-bitars bitmapp (Windows DIB-huvud BITMAPINFOHEADER ) med pixelformat RGB24.

Offset Storlek Hexvärde Värde Beskrivning
BMP-huvud
0h 2 42 4D "BM" ID-fält (42h, 4Dh)
2h 4 46 00 00 00 70 byte (54+16) Storleken på BMP-filen (54 byte header + 16 byte data)
6h 2 00 00 Oanvänd Applikationsspecifik
8h 2 00 00 Oanvänd Applikationsspecifik
ah 4 36 00 00 00 54 byte (14+40) Offset där pixelmatrisen (bitmappsdata) kan hittas
DIB Header
Va 4 28 00 00 00 40 byte Antal byte i DIB-huvudet (från denna punkt)
12h 4 02 00 00 00 2 pixlar (vänster till höger ordning) Bitmappens bredd i pixlar
16h 4 02 00 00 00 2 pixlar (botten till toppordning) Bitmappens höjd i pixlar. Positivt för pixelordning från botten till topp.
1 Ah 2 01 00 1 plan Antal färgplan som används
1 kap 2 18 00 24 bitar Antal bitar per pixel
1 Eh 4 00 00 00 00 0 BI_RGB, ingen pixel array-komprimering används
22h 4 10 00 00 00 16 byte Storleken på rå bitmappsdata (inklusive utfyllnad)
26h 4 13 0B 00 00 2835 pixlar/meter horisontellt
Utskriftsupplösning för bilden, 72 DPI × 39,3701 tum per meter ger 2834,6472
2 Ah 4 13 0B 00 00 2835 pixlar/meter vertikalt
2 Eh 4 00 00 00 00 0 färger Antal färger i paletten
32h 4 00 00 00 00 0 viktiga färger 0 betyder att alla färger är viktiga
Start av pixel array (bitmappsdata)
36h 3 00 00 FF 0 0 255 Röd, Pixel (x=0, y=1)
39h 3 FF FF FF 255 255 255 Vit, Pixel (x=1, y=1)
3 kap 2 00 00 0 0 Utfyllnad för 4 byte justering (kan vara ett annat värde än noll)
3 Eh 3 FF 00 00 255 0 0 Blå, Pixel (x=0, y=0)
41h 3 00 FF 00 0 255 0 Grön, Pixel (x=1, y=0)
44h 2 00 00 0 0 Utfyllnad för 4 byte justering (kan vara ett annat värde än noll)
0,0: blue 0000FF FF 0,1: green 00FF00 FF 0,2: red FF00000 FF 0,3: white FFFFFF FF 1,0: blue 0000FF 7F, half transparent 1,1: green 00FF00 7F, half transparent 1,2: red FF0000 7F, half transparent 1,3: white FFFFFF 7F, half transparent
About this image
Exempel 2 på en bitmapp på 4×2 pixlar, med 32 bitar/pixelkodning

Exempel 2

Följande är ett exempel på en 4×2 pixel, 32-bitars bitmapp med opacitetsvärden i alfakanalen (Windows DIB Header BITMAPV4HEADER ) med pixelformatet ARGB32.

Offset Storlek Hexvärde Värde Beskrivning
BMP-huvud
0h 2 42 4D "BM" ID-fält (42h, 4Dh)
2h 4 9A 00 00 00 154 byte (122+32) Storleken på BMP-filen
6h 2 00 00 Oanvänd Applikationsspecifik
8h 2 00 00 Oanvänd Applikationsspecifik
ah 4 7A 00 00 00 122 byte (14+108) Offset där pixelmatrisen (bitmappsdata) kan hittas
DIB Header
Va 4 6C 00 00 00 108 byte Antal byte i DIB-huvudet (från denna punkt)
12h 4 04 00 00 00 4 pixlar (vänster till höger ordning) Bitmappens bredd i pixlar
16h 4 02 00 00 00 2 pixlar (botten till toppordning) Bitmappens höjd i pixlar
1 Ah 2 01 00 1 plan Antal färgplan som används
1 kap 2 20 00 32 bitar Antal bitar per pixel
1 Eh 4 03 00 00 00 3 BI_BITFIELDS, ingen pixel array-komprimering används
22h 4 20 00 00 00 32 byte Storleken på rå bitmappsdata (inklusive utfyllnad)
26h 4 13 0B 00 00 2835 pixlar/meter horisontellt
Utskriftsupplösning för bilden, 72 DPI × 39,3701 tum per meter ger 2834,6472
2 Ah 4 13 0B 00 00 2835 pixlar/meter vertikalt
2 Eh 4 00 00 00 00 0 färger Antal färger i paletten
32h 4 00 00 00 00 0 viktiga färger 0 betyder att alla färger är viktiga
36h 4 00 00 FF 00 00FF0000 i big-endian Röd kanalbitmask (giltig eftersom BI_BITFIELDS har angetts)
3 Ah 4 00 FF 00 00 0000FF00 i big-endian Grön kanalbitmask (giltig eftersom BI_BITFIELDS har angetts)
3 Eh 4 FF 00 00 00 000000FF i big-endian Blå kanalbitmask (giltig eftersom BI_BITFIELDS har angetts)
42h 4 00 00 00 FF FF000000 i big-endian Alfakanalbitsmask
46h 4 20 6E 69 57 liten endian " vinn " LCS_WINDOWS_COLOR_SPACE
4 Ah 24h 24h* 00...00 CIEXYZTRIPLE Färgrymds slutpunkter Oanvänd för LCS " Win " eller " sRGB "
6 Eh 4 00 00 00 00 0 Röd Gamma Oanvänd för LCS " Win " eller " sRGB "
72h 4 00 00 00 00 0 Grön Gamma Oanvänd för LCS " Win " eller " sRGB "
76h 4 00 00 00 00 0 Blå Gamma Oanvänd för LCS " Win " eller " sRGB "
Start av Pixel Array (bitmappsdata)
7 Ah 4 FF 00 00 7F 255 0 0 127 Blå (Alfa: 127), Pixel (x=0, y=1)
7 Eh 4 00 FF 00 7F 0 255 0 127 Grön (Alfa: 127), Pixel (x=1, y=1)
82h 4 00 00 FF 7F 0 0 255 127 Röd (Alfa: 127), Pixel (x=2, y=1)
86h 4 FF FF FF 7F 255 255 255 127 Vit (Alfa: 127), Pixel (x=3, y=1)
8 Ah 4 FF 00 00 FF 255 0 0 255 Blå (Alfa: 255), Pixel (x=0, y=0)
8 Eh 4 00 FF 00 FF 0 255 0 255 Grön (Alfa: 255), Pixel (x=1, y=0)
92h 4 00 00 FF FF 0 0 255 255 Röd (Alfa: 255), Pixel (x=2, y=0)
96h 4 FF FF FF FF 255 255 255 255 Vit (Alfa: 255), Pixel (x=3, y=0)

Observera att bitmappsdata börjar med det nedre vänstra hörnet av bilden.

Användning av BMP-format

Enkelheten i BMP-filformatet, och dess utbredda förtrogenhet i Windows och på andra håll, samt det faktum att detta format är relativt väldokumenterat och har ett öppet format , gör BMP till ett mycket vanligt format som bildbehandlingsprogram från många operativsystem kan Läsa och skriva. ICO- och CUR-filer innehåller bitmappar som börjar med en BITMAPINFOHEADER.

Många äldre grafiska användargränssnitt använde bitmappar i sina inbyggda grafiska delsystem; till exempel Microsoft Windows och OS/2-plattformarnas GDI- undersystem, där det specifika formatet som används är Windows och OS/2 bitmappsfilformat , vanligtvis benämnt med filtillägget .BMP .

Medan de flesta BMP-filer har en relativt stor filstorlek på grund av avsaknad av komprimering (eller allmänt sett låg frekvens körlängdskodning på palleterade bilder), kan många BMP-filer komprimeras avsevärt med förlustfria datakomprimeringsalgoritmer som ZIP eftersom de innehåller redundanta data. Vissa format, som RAR , inkluderar till och med rutiner som är specifikt inriktade på effektiv komprimering av sådan data.

Relaterade format

X Window System använder ett liknande XBM- format för svartvita bilder och XPM ( pixelmap ) för färgbilder. Det finns också en mängd olika "rå"-format, som sparar rådata utan annan information. Portable Pixmap (PPM) och Truevision TGA finns också, men används mindre ofta – eller bara för speciella ändamål; TGA kan till exempel innehålla transparensinformation.

externa länkar