Tak wygląda nagłowek bitmapy 256 kolorowej.
{ Paleta pliku *.BMP zapisanego w 256 kolorach }
{ Opis pol: }
{ B - skladowa niebieska }
{ G - skladowa zielona }
{ R - skladowa czerwona }
{ Z - pole zarezerwowane }
{ Nalezy pamietac, ze w pliku sexonixa skladowe B i R sa zamienione }
{ miejscami, a pole zarezerwowane nie wystepuje }
PPalBMP = ^TPalBMP;
TPalBMP = ARRAY [0..255] OF RECORD B, G, R, Z :byte; END;
{ Naglowek pliku *.BMP. W programie zastosowany do kontroli formatu }
{ zdjec poddawanych obrobce. W nawiasach podano offset pola wzgledem }
{ poczatku pliku }
THeader = RECORD
{ typ - Specyfikator typu pliku okreslajacy typ }
{ przechowywanego obrazu }
{ BM - BitMapa }
{ BA - Bitmap Array (tablica bitmapy }
{ CI - Color Icon (kolorowa ikona) }
{ CP - Color Pionter (kursor myszy) }
{ IC - Icon (ikona) }
{ PT - Pointer (kursor myszy) }
{ 00h } typ :ARRAY [0..1] OF char;
{ FSIze - Rozmiar calego pliku podany w bajtach. Nas }
{ interesuje tylko rozmiar 65078 }
{ 02h } FSize :LongInt;
{ wolne1 i wolne2 - Pola zarezerwowane, zawsze 0 }
{ 06h } wolne1 :word;
{ 08h } wolne2 :word;
{ offset - Odleglosc od poczatku pliku pierwszego bajtu }
{ obrazu, podana w pikselach }
{ 0Ah } offset :LongInt;
{ info - Rozmiar naglowka informacyjnego bitmapy podany }
{ w bajtach. Dla bitmap tworzonych w roznych systemach }
{ moze przybierac rozna wartosc: }
{ 12 - dla systemu OS/2 1.x, }
{ 40 - dla systemu Windows 3.x, }
{ 64 - dla systemu OS/2 2.x }
{ 0Eh } info :LongInt;
{ szer - Szerokosc obrazu podana w pikselach. Dla programu }
{ musi byc rowna 320 }
{ 12h } szer :LongInt;
{ wys - Wysokosc obrazu podana w pikselach. Dla programu }
{ musi byc 200 }
{ 16h } wys :LongInt;
{ plany - liczba planow w obrazie, zawsze 1. Inne wartosci }
{ mozna spotkac w animowanych gifach }
{ 1Ah } plany :word;
{ BitPerPixel - Liczba bitow uzywana do reprezentacji }
{ jednego piksela: }
{ 1 - bitmapa monochromatyczna (czarno - biala), }
{ 4 - bitmapa 16-kolorowa, }
{ 8 - bitmapa 256-kolorowa, }
{ 24 - bitmapa sklada sie z pikseli mogacych przybierac jeden }
{ z 16777216 kolorow, plik bitmapy nie ma palety kolorow, }
{ kazde kolejne trzy bajty obrazu oznaczaja intenywnosc }
{ barwy czerwonej, zielonej i niebieskej dla kolejnych }
{ pikseli }
{ 1Ch } BitPerPixel :word;
{ kompresja - Typ kompresji obrazu: }
{ 0 - BI_RGB, obraz nieskompresowany, }
{ 1 - BI_RLE, 8 bitowa kompresja RLE, }
{ 2 - BI_RLE, 4 bitowa kompresja RLE }
{ 1Eh } kompresja :LongInt;
{ rozmiar - Rozmiar obrazu podany w bajtach }
{ 22h } rozmiar :LongInt;
{ HDPI Horizontal Dots Per Inch - Pozioma rozdzielczosc obrazu }
{ podana w ilosci punktow na cal kwadratowy }
{ 26h } HDPI :LongInt;
{ VDPI Vetical Dots Per Inch - Pionowa rozdzielczosc obrazu }
{ podana w ilosci punktow na cal kwadratowy }
{ 2Ah } VDPI :LongInt;
{ kolory - Jezeli liczba uzywanych kolorow wynosi zero, bitmapa }
{uzywa liczby kolorow zgodnej z liczba bitow uzywanych do }
{ reprezenatcji jednego piksela; jezeli pole zawiera wartosc }
{ niezerowa, okresla ona liczbe wzorcow koloru uzywanych do }
{ wyswietlania obrazu }
{ 2Eh } kolory :LongInt;
{ znaczace - Liczba wzorcow koloru brana pod uwage podczas }
{ ustalania kolorow pikseli; jezeli to pole zawiera 0, to }
{ znaczy, ze wszystkie kolory sa uzywane }
{ 32h } znaczace :LongInt;
END;
CONST
SizePalBMP = 1024; { rozmiar palety bitmapy 8 bitowej }
SizePalSEX = 768; { rozmiar palety pliku sexonixa }
HeaderSize = 54; { rozmiar naglowka informacyjnego }
Bitmapa 24bitowa różni się tym, że nie posiada palety kolorów. Ma nagłówek i dane obrazu. Każdy piksel jest zapisany jako RGB.
Dane :array [0..Szerokosc, 0..Wysokosc] of record r,g,b :Byte; end;
(mniej więcej)