BMP = BitMaP (Bittérkép)

Az egyik legegyszerűbben használható, (valaha) legnépszerűbb pixeles képformátum. Eredeti kifejlesztő: Microsoft. Eredeti alkalmazási területe: Windows legrégebbi verziótól kezdve számtalan más alkalmazás. Másik elnevezése: DIB (Device-independent Bitmap, azaz forrás-független bittérkép)
A tömörítetlen BMP fájlokban az egyes információk pixelenként, azaz képpontonként vannak tárolva. Gyakorlatilag minden egyes képpontról csak a szín van eltárolva, mivel nincs is más lényeges adat. Ez a szín lehet 1, 4, 8, 16, 24 vagy 32 bites. Az 1-8 bites tárolás esetén lehetséges a szürke-árnyalatú megjelenítés is. Ugyancsak az 1-8 bites színek esetén maguk pixeleket leíró bájtok nem színt tartalmaznak, hanem egyszerűen csak a BMP fájlban tárolt paletta egyes elemeire mutatnak. A 24 bites megjelenésnél például már minden egyes pixel információját 3 bájt adja meg az RGB-kódoknak megfelelően. A formátum lehetőséget nyújt arra is, hogy a 24 bites tárolás mellett a negyedik (ún. alfa-csatornában) kódolják a 24 bitről 32 bitre konvertáló kódokat.

A tömörítetlen formátum óriási hátránya, hogy a mérete hatalmas.

A BMP fájlok részletei:

  • Fájlfejléc (10 bájt): Alapadatok

  • Bitmap információs fájlfejléc (40 bájt): A kép alapvető jellemzői

  • Paletta – nem kötelező (paletta-színek száma * 4 bájt): a tárolt RGB-kódok

  • Bittérkép adatok (sok-sok bájt): A kép tényleges helye.

 

Fájlfejléc részei: (14 bájt)

Kezdés

Méret (bájt)

Leírás

0

2

Azonosító (hexadecimális) szám:

B (66) és M (77) => BMP a Windows rendszerekben

BA: OS/2 Bitmap kép

CI: OS/2 színes ikon

CP: OS/2 színes mutató

IC: OS/2 ikon

PT: OS/2 mutató

2

4

Fájlméret (bájtban)

6

2*2

Szabad terület, de egyes képszerkesztő programok használhatják.

10

4

A bittérkép kezdőcíme (eltolási érték). Gyakorlatilag azt mutatja meg, hogy hol kezdődik maga a kép. Ha nincsen paletta, akkor ez az érték: 54.

 

Bitmap információs fejléc: (40 bájt)

Ez tárolja a helyes megjelenéshez szükséges információkat, melyeket az egyes alkalmazások tudnak hasznosítani. Ez a blokk a Windows és az OS/2 számos variánsa által alkalmazott egyéb információt is tartalmaz, bár ezek szükségességéről a vélemények megoszlanak. Valamennyi információ DWORD típusú blokkban van, így a fejléc adatait könnyebb tárolni, illetve az egyes alkalmazások számára a kép helyes méretezését is könnyebb kiszámolni. A különböző variánsok azért is jöttek létre, mert a Microsoft több alkalommal is ezen fejlécet alkalmazta a DIB formátumnál. A fejléc kibővülésének másik oka a visszafelé való kompatibilitás, azaz az újabb program- és BMP-variánsok támogatják a régebbiek megjelenését. Részletesebb információt az alábbi táblázat tartalmaz:

 

Méret

Fejléc

Azonosító

Támogatott grafikus megjelenés

40

Windows V3

BITMAPINFOHEADER

Minden 3.0 feletti Windows verzió

12

OS/2 V1

BITMAPCOREHEADER

OS/2, valamint 3.0 és minden e feletti Windows verzió

64

OS/2 V2

 

 

108

Windows V4

BITMAPV4HEADER

95/NT4 és minden feletti Windows verzió

124

Windows V5

BITMAPV5HEADER

98/2000 és minden feletti Windows verzió

 

A kompatibilitás miatt a legtöbb verzió használj az idősebb, mára erősen elavult DIB-fejlécet is, bár ezt leginkább az OS/2-ben használták fel, ami felett már erősen elmúlt az idő. A legtöbb értéket előjel nélküli egészként tárolja a rendszer.

 

Eltolás (hexadecimális)

Méret (byte)

Leírás

0E

4

A fejléc ezen részének mérete (40 bájt)

12

4

Kép szélessége képpontban

16

4

Kép magassága képpontban

1A

2

Használni kívánt színek száma. Értéke kötelezően: 1.

1C

2

Képpontonként használt bitek száma, ami a kép színmélységét írja le. Jellemző értékei: 1, 4, 8, 16, 24 és 32.

1E

4

A használt tömörítési eljárás. Lásd a következő táblázatot!

22

4

A kép mérete. Ez a nyers bittérképes adat és nem szabad összekeverni a kép valódi méretével.

26

4

A kép vízszintes felbontása (képpont méterenként)

2A

4

A kép függőleges felbontása (képpont méterenként)

2E

4

A palettán lévő színek száma vagy 0. (Alapértelmezés: 2n).

32

4

A felhasznált fontos színek száma vagy 0, amikor minden szín fontos. Általában figyelmen kívül kell hagyni.

 

A tömörítési mező ($1E-$21) a következő értékeket veheti fel:

 

Érték

Azonosító

Tömörítési eljárás

Megjegyzés

0

BI_RGB

nincs

Leggyakoribb érték

1

BI_RLE8

RLE 8bit/képpont

Csak 8 bit/képpontos színmélységnél használható

2

BI_RLE4

RLE 4bit/képpont

Csak 4 bit/képpontos színmélységnél használható

3

BI_BITFIELDS

Bittérkép

Csak 16 és 32 bit/képpontos színmélységnél használható.

4

BI_JPEG

JPEG

JPEG kép.

5

BI_PNG

PNG

PNG kép.

 

Megjegyzés: RLE (Run-length encoding): az egyik legegyszerűbb adattömörítési eljárás, melynek segítségével a kép méretét csökkenteni lehet. Tulajdonképpen sorra veszi az egyes képinformációkat és minden információ előtt kiírja, hogy abból a színből hány pixel következik, amint ezt a lenti példa is mutatja:

WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW

Ennek tömörítése RLE eljárás segítségével: 12W1B12W3B24W1B14W.

 

Megjegyzés: a BI_JPEG és a BI_PNG azonosítók csak a nyomtatók számára vannak fenntartva, mivel a képernyős megjelenítés számára ezeket az értékeket nem használja a rendszer.

Paletta:

A BMP-fájl palettája, ha egyáltalán található a fájlban, mindig a fejléc 3. részében van. A paletta gyakorlatilag simán felsorolja a képben használt színek azonosítóját. A kép minden egyes színét leírja pár bittel (1, 4 vagy 8), amely egyetlen sorként szerepel a paletta táblázatában. Az adott képet megjelenítő alkalmazás számára ezen táblázat jelenti, hogy az egyes képpontot konkrétan milyen színként is kell megjeleníteni a képernyőn.

A DIB mindig az RGB modellt használja. Itt az egyes képpontokat mindig a három elsődleges színből keveri ki a rendszer: R = Red = Vörös; G = Green = Zöld és B = Blue = Kék. Minden egyes szín 0-tól 255-ig vehet fel értéket.

A paletta bejegyzéseinek száma csak kis mértékben korlátozott, mivel létezik egy elméleti határ (2n), de ezt nem kell teljes mértékben kitölteni, kivétel csak az OS/2 V1 volt, ahol a teljes palettát kellett mindig tárolni. Minden bejegyzés 4 bájtot tartalmaz, kivéve az OS/2 V1 három bájtos bejegyzései. Az első három bájt mindig az RGB-kódot tartalmazza, míg a negyedik bájt nincsen kihasználva, így az mindig 0-t tartalmaz, hacsak egyáltalán nincsen ilyen (OS/2 V1).

Mint az előzőekben szó volt róla, a paletta egyáltalán nem használható a 16 bites színmélységű vagy ennél nagyobb képeknél.

Bittérkép adatok:

Ez a blokk írja le ténylegesen a képet magát képpontról képpontra. A tárolási sorrend kicsit furcsa, mivel az információt a bal alsó saroktól kezdve tárolja, minden egyes sorban balról jobbra megy, majd 1-1 sort emelkedik. Tömörítetlen Windows bittérképet lehet tárolni a felső sortól az alsóig sorba rakva, ha a magasság értéke negatív.

Az eredeti DIB formátumnál még csak 4 lehetséges képpontonkénti bitérték volt: 1, 4, 8 és 24. Minden esetben a pixel leírásához használt értéket kiterjesztik 32 bitre (4 bájtra), feltöltve további fel nem használt bitekkel, amelyek nem feltétlenül zérus értékűek. Így sikerül elérni, hogy a következő értékes bejegyzés, azaz képpont-információs csak a következő 4 bájtos blokkban kezdődjön. Ezáltal a kép feldolgozhatósága is nagyban megnő!

  • Egy-bites színmélységnél (fekete-fehér képek) az értéket minden bitben tárolják. A legfontosabb bit a legelső, ahol a tényleges színérték tárolódik.

  • 4 bites színmélységnél (16 szín) 2 képpontot tárolnak 1 bájtban. Minden egyes színinformáció a palettára való utalást jelent.

  • 8 bites színmélységnél (256 szín) minden képpont 1 bájton tárolódik. Minden egyes bájt a paletta egy-egy sorára történő bejegyzést tartalmaz.

  • RGB-színeknél (24 bites színmélység) a képpontokat a hagyományos RGB-színskála szerint tárolják le: minden egyes képpont szín-információját 3 bájt tárolja.