|
|||
BMPTento grafický formát pôvodne pochádza z dielne Microsoft Windows a v tomto operačnom systéme je plne podporovaný. Existuje niekoľko verzií tohto formátu, ale my sa tu budeme zaoberať len verziou Microsoft Windows Version 3.x Aj keď je formát BMP dobre definovaný, neexistuje oficiálna špecifikácia publikovaná firmou Microsoft. Informácie o štruktúre a kódových metódach sú obsiahnuté v nespočetnom množstve príručiek, manuálov a tiež v Microsoft Windows Software Development Kit (SDK). Organizácia súboruSúbor sa dá logicky rozdeliť do štyroch častí: bitmapová hlavička, informačná hlavička, paleta a bitmapa. Z týchto štyroch sekcií je voliteľná iba paleta. Bitmapová hlavička
typedef struct _Win3xBitmapHeader {
WORD ImageFileType; /* typ súboru, vždy ("BM") */
DWORD FileSize; /* fyzická veľkosť súboru v bajtoch */
WORD Reserved1; /* vždy 0 */
WORD Reserved2; /* vždy 0 */
DWORD ImageDataOffset; /* začiatok bitmapových dát ako offset v bajtoch */
} WIN3XHEAD;
Informačná hlavička
typedef struct _Win3xBitmapInfoHeader {
WORD HeaderSize; /* veľkosť hlavičky */
DWORD ImageWidth; /* šírka obrázka v bodoch */
DWORD ImageHeight; /* výška obrázku v bodoch */
WORD NumberOfPlanes; /* počet rovín, vždy 1 */
WORD BitsPerPixel; /* počet bitov na bod (1, 4, 8, 24) */
DWORD CompressionMethod; /* použitá kompresná metóda (1, 2, 3) */
DWORD SizeOfBitmap; /* veľkosť bitmapy v bajtoch */
DWORD HorzResolution; /* horizontálne rozlíšenie v bodoch na meter */
DWORD VertResolution; /* vertikálne rozlíšenie v bodoch na meter */
DWORD NumColorUsed; /* počet farieb v obrázku */
DWORD NumSignificanttColor; /* počet dôležitých farieb v palete */
} WIN3XINFOHEAD;
Paleta
Všetky 1-, 4- aj 8-bitové BMP obrázky majú paletu. Veľkosť palety závisí od počtu
farieb obrázka a je určená v hodnotou
typedef struct _Win3xPalette {
RGBQUAD Palette[]; /* 2, 16, alebo 256 elementov */
} WIN3XPALETTE;
Každá farba je v palete reprezentovaná štvorjbajtovou hodnotou.
typedef struct _Win3xRgbQuad {
BYTE Blue; /* 8-bitová zložka modrej */
BYTE Green; /* 8-bitová zložka zelenej */
BYTE Red; /* 8-bitová zložka červenej */
BYTE Reserved; /* 8-bitová vyhradená hodnota, vždy 0 */
} RGBQUAD;
Prvé dve farby v palete bývajú obvykle biela a čierna. Ostatné sú potom v ľubovoľnom poradí.
Obrazové dátaZvyšok súbora pozostáva z bitmapových dát, ktoré môžu byť buď nekomprimované, alebo komprimované RLE kompresiou. V jednobitových obrázkoch reprezentuje jeden bajt osem obrazových bodov, kde najvýznamnejší bit je prvá bodová hodnota. Štvorbajtové obrázky sú uložené ako dva body na jeden baj, kde významnejší nibble je prvý bod, menej významý nibbl eje druhý bod. Osembitové obrazký samozrejme obsahujú jeden bajt na bod. Pri 24-bitových obrázkoch je jeden od reprezentovaný troma po sebe idúcimi bajtami v poradí červený, zelený a modrý kanál. Každý skanovací riadok v BMP súbore je vždy násobkom štyroch bajtov a tento počet je v prípade nutnosti doplnený nulami. Kódovanie obrazových dátPrevažná časť BMP súborov je ukladaná v nekomprimovanej podobe. Komprimujú sa iba obrazové dáta uložné v štyroch alebo ôsmych bitoch na bod. Pri zvyšných fomátoch sa do neodporúča, lebo tu pomerne ľahko dochádza k negatívnej kompresii. Obrazové dáta sú ukladané vo forme paketov dvoch typov: kódovaný a citovaný. Obidva pakety musia končiť na hranici skanovacieho riadka. Kódový paket obsahuje dva bajty. Prvý je počet bodov v pakete, a druhý je bodová hodnota. Prvý bajt je vždy nenulový a má hodnotu 1-255 a jeho hodnota určuje, koľko krát má byť druhý bajt skopírovaný na výstup. Citovaný paket obsahuje päť alebo viac bajtov. Prvý je vždy 0, aby signalizoval citovaný paket. Druhý bajt má hodnotu 3-255 a indikuje počet bajtov, ktoré následujú a ktoré majú byť čítané ako citované hodnoty. Citované hodnoty sa kopírujú na výstup. Ešte existujú tzv. escape sekvencie, ktoré pozostávajú z dvoch bajtov. Prvý, tak ako u citovanéh paketu, je 0, a druhý môže nadobúdať hodnoty:
|
|||
|
|||