BMP-filformat
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
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:
|
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.
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 |
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:
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:
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:
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 ).
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):
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 | 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
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) |
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
- Bitmap File Structure , på digicamsoft.com
- En introduktion till DIBs (Device Independent Bitmaps) , på herdsoft.com
- En enkel bitmap loader C++ klass, på kalytta.com (A2R10G10B10 stöds inte ännu)
- BMP-filformatet, del 1 av David Charlap i Dr. Dobbs journal of software tools (drdobbs.com), mars 1995