Sari la conținut

BMP (format fișier)

De la Wikipedia, enciclopedia liberă
(Redirecționat de la BMP)
Windows Bitmap
Extensie de fișier.bmp, .dib
Tip MIMEimage/bmp[1]
UTIcom.microsoft.bmp
Dezvoltat deMicrosoft
Tipul formatuluiGrafică rastru

Formatul de fișier BMP (en. Bitmap - hartă de biți), cunoscut de asemenea și ca fișier imagine Bitmap sau formatul de fișier DIB (en. Device Independent Bitmap - „bitmap” independent de dispozitiv) sau pur și simplu Bitmap, este un format de fișier imagine de tip rastru folosit pentru a stoca imagini digitale independent de dispozitivul de afișare (cum ar fi un adaptor grafic) în special pe sistemele de operare Microsoft Windows și OS/2.

Formatul de fișier BMP este capabil de a stoca imagini digitale bidimensionale de lățime, înălțime și rezoluție arbitrare, monocrome sau color, de variate adâncimi de culoare iar opțional cu comprimare de date, canale alfa și profile de culoare. Microsoft nu a publicat niciodată o specificație de sine stătătoare a formatului; informațiile despre structura și codificarea datelor au fost difuzate prin documentația pentru programatori și prin kiturile de dezvoltare software pentru Windows.[1]

Structura fișierului

[modificare | modificare sursă]

Un fișier BMP este alcătuit din structuri de dimensiune fixă (anteturi) și din structuri de dimensiune variabilă, care apar într-o ordine prestabilită: antetul de fișier de 14 octeți, antetul DIB, eventualele măști de biți suplimentare, tabelul de culori, matricea de pixeli și, opțional, un profil de culoare ICC. Din cauza evoluției îndelungate a formatului, în fișier pot apărea versiuni diferite ale unora dintre aceste structuri.[2]

Antetul de fișier

[modificare | modificare sursă]

Acest bloc de octeți se află la începutul fișierului și servește la identificarea lui, iar toate valorile întregi din fișier sunt stocate în format little-endian, adică octetul cel mai puțin semnificativ primul.[3]

Secvențele posibile ce identifică formatul BMP sunt:

Ofset # Dimensiune (octet) Valoare (hex) Descriere
0 2 42 4D[4] Primii doi octeți identifică formatul fișierului
2 4 00 00 – FF FF Dimensiunea imaginii desenate pe doi octeți.
6 2 Rezervați Rezervați. Octeți completați de aplicația software.
8 2 Rezervați Rezervați. A doua serie extinsă de octeți completată de aplicația software.
10 4 00 00 00 0A – FF FF FF FF Începutul datelor propriu-zise (raw), unde se stochează imaginea.
0Ax 1 00x – FFx Primul octet.
0Ax + 1 1 00x – FFx Al doilea octet.
EOF − 1 1 00x – FFx Ultimul octet.

Antetul DIB urmează imediat după antetul de fișier și transmite aplicației informațiile necesare afișării imaginii. Toate variantele lui încep cu un câmp de 32 de biți care indică propria dimensiune, astfel încât aplicația poate determina ce versiune este folosită. Fiindcă Microsoft a extins formatul de mai multe ori, există șapte variante de antet.[2][3]

Fiecare versiune nouă doar adaugă câmpuri la sfârșitul antetului precedent, iar variantele BITMAPINFOHEADER și BITMAPV5HEADER le-au înlocuit pe cele mai vechi, BITMAPCOREHEADER, respectiv BITMAPV4HEADER.[2][1] Cel mai răspândit este BITMAPINFOHEADER, de 40 de octeți, care conține dimensiunile imaginii în pixeli, numărul de biți pe pixel, metoda de comprimare, rezoluția și numărul de culori din paletă.

Paleta de culori și stocarea pixelilor

[modificare | modificare sursă]

Pentru imaginile cu adâncimi de culoare de cel mult 8 biți este obligatoriu un tabel de culori (paletă), fiecare pixel fiind descris printr-un indice ce trimite la o culoare din acest tabel; în majoritatea cazurilor o intrare ocupă 4 octeți, în ordinea albastru, verde, roșu și un octet nefolosit.[3]

Biții care reprezintă pixelii sunt grupați pe rânduri, numite și linii de scanare, iar dimensiunea fiecărui rând este rotunjită în sus la un multiplu de 4 octeți prin adăugarea unor octeți de umplutură. În mod implicit rândurile sunt stocate „de jos în sus”, adică primul rând din fișier este ultimul rând afișat; cu excepția fișierelor care folosesc antetul BITMAPCOREHEADER sau comprimarea RLE, imaginile pot fi stocate și „de sus în jos”, caz în care înălțimea este scrisă în antet ca număr negativ.[2]

Cea mai frecventă metodă este BI_RGB, adică absența comprimării; în practică majoritatea imaginilor BMP sunt necomprimate, iar cele de 16 și de 32 de biți pe pixel sunt întotdeauna stocate necomprimat.[1] Imaginile cu paletă pot fi comprimate cu algoritmul run-length (RLE) pe 4 sau pe 8 biți pe pixel, iar în OS/2 și cu o codificare Huffman unidimensională.[3] Începând cu antetul BITMAPV4HEADER, câmpul de comprimare poate arăta că datele sunt de fapt o imagine JPEG sau PNG încapsulată, variantă folosită însă doar la tipărire.[5]

Structura simplă a unei imagini BMP necomprimate face ca formatul să fie bine sprijinit de programele de vizualizare și de prelucrare a imaginilor, precum și de navigatoarele web. El este folosit în primul rând în cadrul sistemului de operare Windows, pentru pictograme, capturi de ecran și pentru transferul imaginilor între aplicații, fiind considerat nepotrivit pentru utilizarea generală pe web.[6][1] Fișierele de tip ICO, care conțin pictogramele din Windows, includ imagini ce încep tot cu un antet BITMAPINFOHEADER.[7]

Declararea unei matrice de date tip BMP în C++

[modificare | modificare sursă]
C++ #
|-
 #include <stdint.h>
 struct bmpfile_magic {  unsigned char magic[2]};
 struct bmpfile_header {
  uint32_t filesz;
  uint16_t creator1;
  uint16_t creator2;
  uint32_t bmp_offset;};
  1. 1 2 3 4 5 „Bitmap Image File (BMP), Version 5” (în engleză). Biblioteca Congresului. Accesat în .
  2. 1 2 3 4 „Bitmap Header Types” (în engleză). Microsoft Learn. Accesat în .
  3. 1 2 3 4 James D. Murray; William vanRyper (aprilie 1996). Encyclopedia of Graphics File Formats (în engleză) (ed. a 2-a). O'Reilly. ISBN 1-56592-161-5.
  4. ↑ „File extension BMP filetypes” (în engleză). File Extension Seeker. . Accesat în .
  5. ↑ „BITMAPINFOHEADER structure (wingdi.h)” (în engleză). Microsoft Learn. Accesat în .
  6. ↑ „Bitmap Image File (BMP) Version 5” (în engleză). OnlyDoc. Accesat în .
  7. ↑ „Icons” (în engleză). Microsoft Learn. Accesat în .