spacer.png, 0 kB
Bestandsformaat BMP E-mail

Voor plaatjes zijn er veel bestandsformaten beschikbaar. Iedereen kent wel BMP, GIF en JPG. Maar er zijn er zoveel meer. Reden om eens wat dieper in de grafische bestandsformaten te duiken. En wat natuurlijk nog veel belangrijker is. Welk formaat gebruik je voor welke toepassing.

 

BMP, DIB en TIFF

 

Een eenvoudig bestandsformaat

Wim van ’t Einde

 

Het BMP-formaat werd vroeger veel gebruikt voor plaatjes en dat is niet zo vreemd, want een BMP-plaatje is eenvoudig te maken en net zo eenvoudig te bewerken. Het is dan ook niet meer dan logisch dat de eerste grafische programma’s in dit formaat werkten.

 

Bitmap

BMP is een afkorting van het woord Bitmap. Dit bestandsformaat werd vanaf het begin gebruikt voor eenvoudige plaatjes op computers. Eenvoudig omdat voor elk punt van de afbeelding met een aantal bits wordt aangegeven welke kleur het betreffende punt heeft. Hoe meer kleuren de afbeelding moet kunnen bevatten hoe meer bits er nodig zijn om de kleur weer te geven.

Als voorbeeld staat hieronder een kleurenfoto van een bloem opgenomen. De foto heeft een resolutie van 640 bij 480 pixels. De kleurdiepte van de foto is 256 kleuren. Deze kleuren kunnen met 8 bits worden weergegeven. De theoretische grootte van de foto kan nu worden berekend door de het totale aantal pixels (640 breed en 480 hoog) te vermenigvuldigen met de kleurdiepte (8-bits). De afbeelding is dan dus 2.457.600 bits groot. Een byte bestaat uit 8 bits dus: 2.457.600 / 8 = 307.200 bytes en een kilobyte is 1024 bytes dus 307.200 / 1024 = 300 kilobytes. Overigens maakt het voor de grootte niet uit of de afbeelding wordt weergegeven in kleur of in grijstinten. Beide bestanden zijn 301 kilobytes groot.

Image

Het prettige van Bitmaps en soortgelijke bestanden is loss-less worden genoemd. Het herhaald opslaan van de bestanden heeft geen negatief effect op de kwaliteit van de afbeeldingen. Bij een aantal bestandsformaten die gebruik maken van compressietechnieken gebeurt dat helaas wel. Maar daarover in een volgend artikel meer.

  
Header

Het echte bestand is echter net iets groter: 301 kilobytes (of 308.278 bytes). Dat komt omdat het bestand wat extra informatie nodig heeft voor de naam van het bestand, de afmetingen en dergelijke. Deze extra informatie wordt opgeslagen in de header van de Bitmap.

Om een Bitmap bestand goed te begrijpen is even wat informatie van belang.

Allereerst wordt de Bitmap in rijen opgebouwd. In ons denken gaan we er dan al gauw vanuit dat het in regels van linksboven naar rechtsonder loopt. In de praktijk is dit net andersom. De Bitmap begint rechtsonderin en bouwt eerst de onderkant van het plaatje op en daarna op dezelfde manier de regels erboven.

Daarnaast moet het aantal bytes in een rij een veelvoud van vier zijn. Komt dat niet helemaal uit dan worden de laatste bytes aangevuld met nullen.

Image

De header voor een 24 bits Bitmap ziet er als volgt uit:

bfType1 : Byte ;
(* "B", aan deze en de volgende byte wordt herkend dat het gaat om een Bitmap bestand *)

bfType2 : Byte ;
(* "M" *)

bfSize : LongInt ;
(* Grootte van het bestand (mag nul zijn) *)

bfReserved1 : Word ;
(* Nul *)

bfReserved2 : Word ;
(* Nul  *)

bfOffBits : LongInt ;
(* Plaats waar de Bitmapgegevens beginnen *)

biSize : LongInt ;
(* Aantal bytes *)

biWidth : LongInt ;
(* Breedte van de Bitmap in Pixels *)

biHeight : LongInt ;
(* Hoogte van de Bitmap in Pixels *)

biPlanes : Word ;
(* Aantal lagen = 1 *)

biBitCount : Word ;
(* Het aantal bits per Pixel: 1, 4, 8, of 24 *)

biCompression : LongInt ;
(* BI_RGB = 0, BI_RLE8, BI_RLE4 *)

biSizeImage : LongInt ;
(* Grootte van deel van de afbeelding (wordt meestal niet gebruikt) *)

biXPelsPerMeter : LongInt ;
(* Altijd nul *)

biYPelsPerMeter : LongInt ;
(* Altijd nul *)

biClrUsed : LongInt ;
(* Aantal kleuren dat wordt gebruikt in de afbeelding *)

biClrImportant : LongInt ;
(* Aantal belangrijke kleuren *)

Image

Met deze gegevens is nu ook van de header te berekenen hoe groot deze is:
Een Byte heeft de lengte van 1 byte; Een Word is 2 bytes lang en een LongInt is maar liefst 4 bytes lang.

Als de regels bij elkaar worden opgeteld dan neemt de header dus 54 bytes in beslag.

Image

Compressie

De omvang van een foto kan op een aantal manieren vrij eenvoudig kleiner worden gemaakt. Allereerst door het aantal pixels te verminderen, maar daarnaast natuurlijk vooral door het aantal kleuren te verminderen. Linksonder op de pagina staat een foto met 4 bits kleurdiepte (16 kleuren). De kleuren zijn hierbij al veel minder goed doortekend als bij de kleurenfoto op de eerste pagina, er ontstaan plotselinge overgangen in de afbeelding. De omvang van de afbeelding is nu nog slechts 150 Kb groot.

In de afbeelding boven in de pagina (met slechts 1 bit alleen nog maar zwart en wit) zijn de kleuren helemaal verdwenen en resteren nog slechts witte vlekken in een zwart vlak. De grootte is nu nog maar 37,5 Kb.

Image

Door de foto te rasteren (zoals vroeger met de krantenfoto’s gebeurde is toch nog wat contrast in de afbeelding te brengen, waardoor het resultaat toch nog enigszins toonbaar is, terwijl de afbeelding toch maar 37,5 Kb groot is.

 

Soortgelijke formaten

Naast de Bitmaps bestaan er ook andere formaten die op eenzelfde manier werken; zoals DIB (Device Independant Bitmap) en TIFF (Tagged Image File Format). De bestandsindeling verschilt iets van dat van BMP, maar het principe is ongeveer gelijk.

De volgende aflevering gaat over een ander bekend grafisch bestandsformaat: GIF.

 
 
< Vorige   Volgende >
Joomla Template by Joomlashack
Free Joomla Templates