Bestandsformaten
Wat is BMP? Het bitmapformaat uitgelegd
BMP is het ongecomprimeerde, verliesvrije bitmapformaat van Windows. We leggen de headerstructuur, de kleurdieptes en de beperkingen uit, en hoe je de bestanden kleiner maakt.
Auteur: Hemen Dönüştür Editör EkibiGepubliceerd: 8 min lezen

BMP is een van de oudste en eenvoudigste afbeeldingsformaten in de Windows-wereld. Een BMP-bestand schrijft pixels meestal rij voor rij naar schijf, zonder enige compressie. Die eenvoud maakt het makkelijk te lezen en verliesvrij, en diezelfde eenvoud maakt de bestanden enorm. Dit artikel behandelt waar BMP vandaan komt, wat er in het bestand zit, de details van kleurdiepte en transparantie, waar je het vandaag nog tegenkomt en hoe je BMP-bestanden omzet naar praktischere formaten.
Wat is BMP?
BMP (bitmap, extensie .bmp) is een rasterformaat dat uit pixels bestaat. In technische documentatie heet het ook DIB, een device-independent bitmap (apparaatonafhankelijke bitmap). "Apparaatonafhankelijk" betekent dat de afbeelding op dezelfde manier kan worden geïnterpreteerd, ongeacht de videokaart of printer waarop ze is gemaakt: het bestand bevat in zijn eigen header en kleurentabel de informatie die nodig is om de kleuren te decoderen.
Volgens de Win32-documentatie van Microsoft begint een bitmapbestand met een structuur BITMAPFILEHEADER, gevolgd door een BITMAPINFOHEADER, BITMAPV4HEADER of BITMAPV5HEADER, daarna een optionele kleurentabel en ten slotte de pixelgegevens. Het MIME-type is image/bmp.
Een korte geschiedenis: van Windows en OS/2 tot nu
BMP kwam eind jaren tachtig voort uit het gezamenlijke werk van Microsoft en IBM aan Windows en OS/2. Bitmaps uit het tijdperk van Windows 1.0 waren sterk afhankelijk van het uitvoerapparaat; de apparaatonafhankelijke vorm raakte in 1990 wijdverbreid met Windows 3.0. De BITMAPCOREHEADER van 12 bytes die voor OS/2 Presentation Manager werd gedefinieerd, is de reden dat men nog steeds over "OS/2-BMP"-bestanden spreekt.
In de loop der jaren werd het formaat uitgebreid door velden aan het einde van de header toe te voegen. Volgens de formaatbeschrijving van de Library of Congress kwam versie 5 in 1998 met Windows 98 en werd het daarmee mogelijk ICC-kleurprofielen in het bestand vast te leggen. De gangbare headergroottes zijn nu:
| Header | Grootte | Belangrijkste toevoeging |
|---|---|---|
| BITMAPCOREHEADER | 12 bytes | Basisstructuur, compatibel met OS/2 1.x |
| BITMAPINFOHEADER | 40 bytes | De meest gebruikte header, vanaf Windows 3.0; velden voor compressie en resolutie |
| BITMAPV4HEADER | 108 bytes | Kleurmaskers, een alfamasker en informatie over de kleurruimte |
| BITMAPV5HEADER | 124 bytes | Ingesloten of gekoppelde ICC-profielen, rendering intent |
Lezers herkennen welke header wordt gebruikt aan de groottewaarde in het eerste veld. Zo kan oudere software de nieuwere velden negeren en toch de basis lezen.
Wat zit er in een BMP-bestand?
Bestandsheader en de handtekening "BM"
Elk BMP-bestand begint met een bestandsheader van 14 bytes, en de eerste twee bytes zijn de ASCII-tekens BM (hexadecimaal 42 4D). De header bevat de totale bestandsgrootte en de byte-offset waar de pixelgegevens beginnen. Een DIB op het klembord van Windows (het formaat CF_DIB) laat deze 14 bytes weg en begint direct met de infoheader.
Infoheader
De infoheader bevat de breedte, de hoogte, het aantal bits per pixel (biBitCount), het compressietype, de horizontale en verticale resolutie (in pixels per meter) en het aantal gebruikte kleuren in de kleurentabel.
Kleurentabel (palet)
In afbeeldingen van 8 bits per pixel of minder is een pixel geen kleur, maar een index naar de kleurentabel. In het gedocumenteerde voorbeeld van Microsoft heeft een bitmap van 32x32 met 16 kleuren een pixelreeks van 32 x 32 x 4 = 4096 bits, omdat 4 bits genoeg zijn om 16 kleuren aan te duiden.
Pixelgegevens: rijen van onder naar boven en uitlijning op 4 bytes
BMP heeft twee ongewone eigenschappen. Ten eerste worden de rijen bij een positieve hoogte van onder naar boven opgeslagen: de eerste rij in het bestand is de onderste rij van de afbeelding. Een negatieve hoogte slaat de rijen van boven naar onder op, maar zulke afbeeldingen kunnen niet worden gecomprimeerd. Ten tweede wordt elke rij opgevuld tot een veelvoud van 4 bytes. Microsoft geeft de rijlengte (stride) zo:
stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride
Bij een afbeelding van 1920x1080 in 24 bits is elke rij 1920 x 3 = 5.760 bytes (al een veelvoud van 4), dus de pixelgegevens zijn 5.760 x 1.080 = 6.220.800 bytes. Met de headers van 54 bytes is het bestand ongeveer 6,2 MB. Dezelfde afbeelding als JPG is meestal maar een fractie daarvan.
Kleurdiepte, compressie en transparantie
De documentatie van BITMAPV5HEADER definieert 1, 4, 8, 16, 24 en 32 bits per pixel (de waarde 0 betekent dat de diepte uit ingesloten JPEG- of PNG-gegevens komt). 1 bit is zwart-wit, 4 bits zijn 16 kleuren en 8 bits een palet van 256 kleuren. Bij 24 bits is elke pixel drie bytes in de volgorde blauw, groen, rood.
Het compressieveld kan deze waarden hebben:
- BI_RGB: ongecomprimeerd. In de praktijk het overgrote deel van de BMP-bestanden.
- BI_RLE8 en BI_RLE4: eenvoudige run-length-codering voor paletafbeeldingen van 8 en 4 bits. Handig bij grote egale vlakken, vrijwel nutteloos bij foto's.
- BI_BITFIELDS: geen compressie; maskers bepalen waar de rode, groene en blauwe bits in pixels van 16 en 32 bits zitten (bijvoorbeeld RGB 565).
- BI_JPEG en BI_PNG: staan JPEG- of PNG-gegevens binnen de bitmap toe. Zelden ondersteund door gewone viewers.
Transparantie is het meest inconsistente onderdeel van BMP. Het alfamasker in V4- en V5-headers kan de vierde byte van een 32-bits pixel als dekking definiëren, maar in een klassieke 32-bits BMP wordt die byte als ongebruikt beschreven en negeren veel programma's hem. Een 32-bits BMP die in het ene programma transparant lijkt en in het andere op zwart staat, is dus niets bijzonders. Heb je transparantie nodig, dan is PNG veruit de veiligere keuze.
Ondersteuning in systemen, browsers en software
BMP opent bijna overal. De ingebouwde viewers en Paint in Windows, Voorvertoning in macOS en gangbare viewers op Linux lezen het allemaal. De gids over afbeeldingsformaten van MDN vermeldt BMP-ondersteuning in alle versies van Chrome, Edge, Firefox, Opera en Safari. Dezelfde gids benadrukt ook dat ongecomprimeerde BMP-bestanden vergeleken met PNG of JPG erg groot zijn en dat je ze voor websitecontent in het algemeen moet vermijden.
Waar wordt BMP vandaag gebruikt?
- Bronnen van Windows-toepassingen en oudere software: afbeeldingen in werkbalken, graphics in installatiewizards en sommige game-assets zijn nog BMP.
- Embedded systemen en microcontrollers: een apparaat met een display heeft geen JPEG-decoder nodig; pixelgegevens kunnen rechtstreeks naar het scherm worden gekopieerd.
- Industriële camera's, scanners en testapparatuur: als ruwe, verliesvrije uitvoer nodig is, is BMP een eenvoudig tussenformaat.
- Onderwijs: met een header van maar enkele tientallen bytes is BMP vaak het eerste formaat dat studenten lezen en schrijven in vakken over beeldverwerking.
Sterke en zwakke punten
| Sterke punten | Zwakke punten |
|---|---|
| Verliesvrij; pixelwaarden veranderen nooit | Ongecomprimeerd, dus bestanden zijn erg groot |
| Heel eenvoudig te lezen en te schrijven, geen processorbelasting | Inconsistente ondersteuning van transparantie |
| Opent in vrijwel elk besturingssysteem en elke browser | Zwakke ondersteuning van metadata (EXIF, beschrijvingen) |
| Paletmodi passen bij apparaten met weinig middelen | Onpraktisch voor het web, e-mail en uploadformulieren |
Veelvoorkomende problemen en oplossingen
Het bestand is te groot voor e-mail of een uploadformulier
Dit is het meest voorkomende probleem. Voor foto's en scans maakt BMP naar JPG converteren het bestand meestal een orde van grootte of meer kleiner. Voor schermafbeeldingen, diagrammen of alles met tekst is BMP naar PNG converteren beter: PNG is ook verliesvrij maar wel gecomprimeerd, en het voegt geen ruis toe rond scherpe randen zoals JPG doet.
Een 32-bits BMP toont een zwarte achtergrond
Het programma herkent de alfabyte niet of leest hem verkeerd. Converteren naar PNG lost dat meestal op. Bij converteren naar JPG, dat geen transparantie kent, worden transparante delen met wit of een kleur naar keuze gevuld.
De afbeelding staat ondersteboven of loopt scheef
In een zelfgeschreven lezer komt dat meestal door twee fouten: negeren dat rijen van onder naar boven zijn opgeslagen, of de opvulbytes aan het einde van elke rij niet overslaan. De stride-formule hierboven gebruiken en het teken van de hoogte controleren voorkomt beide.
Een programma weigert een BMP te openen
BMP-bestanden met RLE-compressie, BI_BITFIELDS of ingesloten JPEG-/PNG-gegevens worden door sommige eenvoudige lezers niet ondersteund. Opnieuw opslaan als ongecomprimeerde 24-bits BMP of converteren naar PNG lost het compatibiliteitsprobleem op.
Tips voor het converteren
- JPG voor foto's, PNG voor graphics: de gebruikelijke regel geldt ook als je BMP verlaat. Voor het web kun je in de afbeeldingsconverter ook WebP of AVIF kiezen.
- Houd de kwaliteit hoog: omdat BMP verliesvrij is, geeft een JPG-kwaliteit van 85-90% een resultaat dat nauwelijks van het origineel te onderscheiden is.
- Verklein waar nodig: is het bestand nog steeds groot, verklein dan de afmetingen in pixels of gebruik afbeelding comprimeren om een doelgrootte te halen.
- De andere kant op: heeft een embedded apparaat of ouder programma BMP nodig, kies dan BMP als doel in de afbeeldingsconverter. Onze tools schrijven een standaard ongecomprimeerde 24-bits BMP; transparante delen worden samengevoegd met de achtergrondkleur die je kiest.
Onze pagina's voor BMP-conversie draaien in je browser: het bestand wordt niet geüpload en verlaat je apparaat nooit.
Veelgestelde vragen
Zijn BMP en DIB hetzelfde?
In de praktijk wel. Een DIB is de apparaatonafhankelijke bitmapstructuur die Windows in het geheugen en op het klembord gebruikt; een BMP-bestand is die structuur met een bestandsheader van 14 bytes ervoor.
Is BMP verliesvrij?
Ja. Ongecomprimeerde en met RLE gecomprimeerde BMP-bestanden bewaren pixelwaarden exact. De enige uitzondering is de zeldzame BMP met ingesloten JPEG-gegevens.
Verlies ik kwaliteit als ik BMP naar PNG converteer?
Nee. PNG is ook verliesvrij; de afbeelding blijft identiek en wordt alleen kleiner doordat ze wordt gecomprimeerd.
Kan ik BMP op een website gebruiken?
Browsers tonen BMP, maar de bestanden zijn onnodig groot en maken pagina's traag. Gebruik voor het web JPG, PNG, WebP of AVIF.
Ondersteunt BMP transparantie?
Een 32-bits BMP kan in theorie een alfakanaal bevatten, maar software ondersteunt dat niet consequent. PNG is de veiligere keuze zodra je transparantie nodig hebt.


