You are here: Home » Image Formats » BMP

BMP

Formatul de fișier BMP , de asemenea , cunoscut sub numele de fișier bitmap sau un bitmap (DIB) format de fișier dispozitiv independent sau pur și simplu un Bitmap , este un format de fișier grafic raster utilizat pentru a stoca imagini digitale bitmap, independent de dispozitivul de afișare (cum ar fi un adaptor grafic ), în special pe Microsoft Windows [1] și / 2 OS [2] sisteme de operare.

Formatul de fișier BMP este potrivit pentru stocarea imaginilor digitale cu două-dimensionale ale aleatoare [ necesită citare ] lățime, înălțime și rezoluție, atât alb – negru și culoare, adâncimea de culoare diferită, și , eventual , cu compresie de date, canalele alfa și profiluri de culoare. Windows Metafișier (WMF) , caietul de sarcini se referă la formatul BMP-fișier. [3] Printre altele, wingdi.hdefinește constante și structuri BMP.

bitmap-uri independente de dispozitiv și fișier BMP

Microsoft are o anumită reprezentare bitmap-urilor de culoare definite diferite adâncimi de culoare pentru a ajuta la schimbul între dispozitive și bitmap-uri aplicații cu diferite reprezentări interne. Ei au numit aceste bitmap-uri independente de dispozitiv sau DIB, și formatul de fișier pentru ele se numește format de fișier DIB sau un fișier BMP.

În funcție de suport Microsoft: [4]

Un bitmap-dispozitiv independent (DIB) este un format care este folosit pentru a defini independente de dispozitiv bitmap-uri de culoare în diferite rezoluții. Obiectivul principal al DIB este de la un dispozitiv care urmează să fie mutat într-o altă bitmap (deci partea dispozitiv independent de numele). Un DIB este o formă exterioară, spre deosebire de un bitmap dependente de dispozitiv, care apar în sistem ca un obiect bitmap (printr-o aplicație, …). Un DIB este în mod normal, transportat în metafiles (de obicei, folosind StretchDIBits () funcție), fișiere BMP, și (formatul de date CF_DIB) Clipboard.

In urmatoarele sectiuni discuta datele salvate în fișierul BMP sau DIB în detaliu. Acesta este standardul fișierul BMP. [4] Unele aplicații pentru a crea fișiere imagine bitmap care nu sunt conforme sunt pe Microsoft documentation.Also, nu toate domeniile care sunt utilizate; o valoare de 0 este în aceste zone neutilizate.

Structura de fișiere

Bitmap fișierul de imagine este compus dintr-o structură de dimensiuni fixe (antete), precum și o structură variabilă de dimensiuni sunt văzute într-o ordine prestabilită. Mai multe versiuni diferite ale unui număr de aceste structuri în dosar, evoluția lungă a acestui format de fișier.

Cu referire la schema 1, fișierul bitmap este al structurilor în următoarea ordine:

nume structură facultativ mărimea ţintă Comentarii
antet fișier de tip bitmap Nu 14 octeți Pentru a stoca informații generale despre fișierul de imagine bitmap Nu este necesar, după ce fișierul este încărcat în memorie
antet DIB Nu Fix-size
(există 7 versiuni diferite)
Pentru a stoca informații detaliate despre bitmap și defini dimensiunea pixelilor Imediat după antetul fișierului bitmap
măști de biți suplimentare da 3 sau 4DWORDs [5]
(12 sau 16 biți)
Pentru a defini dimensiunea pixelilor Prezent numai în cazul în care DIB-header este BitmapInfoHeader și elementul de comprimare Metoda este setată la BI_BITFIELDS sau BI_ALPHABITFIELDS
tabel de culori Semi-opțiune Variabila-size Pentru culori utilizate prin definirea datelor de imagine bitmap (pixeli matrice) Obligatoriu pentru adâncimea culorii ≤ 8 biți
Gap1 da Variabila-size alinierea structurii Un artefact al fișierului de offset pentru matrice de pixeli în antetul fișierului bitmap
pixel-matrice Nu Variabila-size Definirea valorilor reale ale pixelilor Mărimea pixelului este determinată de antetul DIB sau măștile de biți suplimentare. Fiecare rând din matrice de pixeli căptușit cu un multiplu de 4 octeți
GAP2 da Variabila-size alinierea structurii Un artefact al datelor de profil CPI câmp de offset în antetul DIB
profil de culoare ICC da Variabila-size Dacă definiți profilul de culoare pentru gestionarea culorilor Pot să conțină , de asemenea , o cale către un fișier extern cu profilul de culoare. Atunci când sunt plasate în memorie ca “DIB nu este ambalat”, este situat între tabelul de culori și Gap1. [6]

DIB în memorie

Un fișier de imagine bitmap încărcată în memorie este o structură de date DIB – o parte importanta a API – ului Windows GDI. Structura de date de memorie DIB este aproape la fel ca și formatul BMP, dar nu conține 14 octeți antet bitmap și începe antetul DIB. Pentru dibs încărcate în memorie, tabelul de culori poate consta din date de 16 biți , care sunt indici pentru paleta realizate în prezent [7] (un nivel suplimentar de indirectare), în loc de explicite definiții de culoare RGB. În toate cazurile, matrice de pixeli trebuie să înceapă de la o adresă de memorie , care este un multiplu de 4 octeți. În dibs non-ambalate încărcate în memorie, datele profilului de culoare opțional , trebuie să fie plasate imediat după masa de culoare și în fața pixel-matrice Gap1 și [6] (opus în diag. 1).

Când dimensiunea Gap1 și GAP2 este zero, structura de date este denumit în mod obișnuit în memoria DIB ca “DIB ambalate”, și pot să fie reprezentate printr – un singur puncte pointer la începutul header -ului DIB. În toate cazurile, matrice de pixeli trebuie să înceapă de la o adresă de memorie , care este un multiplu de 4 octeți. În unele cazuri, poate fi necesar să se ajusteze numărul de intrări în tabelul de culori pentru a forța adresa de memorie de matrice de pixeli, un multiplu de 4 octeți. [7] pentru “DIB Înfășurat” este încărcat în memorie, profilul opțional de culoare date imediat după matrice de pixeli, așa cum se arată în diag. 1 (cu Gap1 GAP2 = 0 și = 0). [6]
“DIB la pachet” cerut de API funcții Clipboard Windows, precum și o serie de funcții perie și resurse în formă de Windows. [8]

antet fișier de tip bitmap

Acest bloc de octeți de la începutul fișierului, și este utilizat pentru a identifica fișierul. O aplicație tipică citiți acest prim bloc, astfel încât fișierul este de fapt un fișier BMP și că acestea nu sunt deteriorate. Primii doi octeți formatul de fișier BMP este semnul “B”, atunci caracterul “M” în codificarea ASCII. Toate numerele întregi sunt în format mic-endian (de exemplu, octetul cel mai puțin semnificativ mai întâi).

hex de compensare compensate decembrie mărimea ţintă
00 0 2 octeți Câmpul antet este utilizat pentru a identifica BMP și fișierul DIB este 0x42 0x4Dîn hexazecimal, la fel ca BMîn ASCII. Următoarele opțiuni sunt disponibile:

  • BM – Windows 3.1x, 95, NT, etc …
  • BA – OS / 2 Bitmap Structura matrice
  • CI – OS / 2 culoare Structura icon
  • CP – OS / 2 culoare pointer Const
  • IC – OS / 2 pictograma copac
  • PT – OS / 2 pointer
02 2 4 octeți Dimensiunea fișierului în octeți BMP
06 6 2 octeți Rezervat; Valoarea reală depinde de aplicația care creează imaginea
08 8 2 octeți Rezervat; Valoarea reală depinde de aplicația care creează imaginea
0A 10 4 octeți Offset, adică, de la adresa octetului unde pot fi găsite datele de imagine bitmap (pixeli matrice).

antet DIB (informații de antet bitmap)

Acest bloc de octeți indică aplicația informații detaliate despre imagine, care este folosit pentru a afișa imaginea de pe ecran. Blocul corespunde, de asemenea, antetul folosit intern de Windows și OS / 2 și are mai multe variante. Fiecare dintre ele conține un câmp DWORD (32-bit), indicând mărimea lor, astfel încât o aplicație poate determina cu ușurință care antet este utilizat în imagine. Motivul pentru care există diferite antete este faptul că Microsoft a extins formatul DIB de mai multe ori. Antetele extinse pot fi utilizate cu anumite funcții GDI în locul vechi, cu mai multe caracteristici. Ca o funcție GDI suportă fișiere bitmap de încărcare, tipic pentru Windows rezultat aplicațiile functionaliteit.Een, pentru astfel de aplicații, formatele BMP le suport corespund formatele acceptate de versiunea pentru Windows uitgevoerd.Zie tabelul de mai jos pentru mai multe informații.

WINDOWS ȘI OS / 2 headers-Bitmap
mărimea nume antet OS sprijin caracteristică Compus de
12 BITMAPCOREHEADER
OS21XBITMAPHEADER
Windows 2.0 sau mai mare
OS / 2 1.x [2]
64 OS22XBITMAPHEADER OS / 2 BITMAPCOREHEADER2 Adaugă compresie screening.VoegtRLE și 1D Huffman.
16 OS22XBITMAPHEADER Această variantă de mai sus se crede antet conține primele 16 octeți și octeții rămase la zero valori. [2] Un exemplu de un astfel de caz este grafic pal8os2v2-16.bmp [9] a Suite BMP. [10]
40 BitmapInfoHeader Windows NT 3.1x sau mai mare [1] Adaugă 16 BPP și 32 de compresie BPP formats.Adds RLE.
52 BITMAPV2INFOHEADER nedocumentate Adaugă măști de biți RGB. Adobe Photoshop
56 BITMAPV3INFOHEADER Nu documentate oficial, dar documentația a fost postat de forumuri Adobe, de către un angajat al Adobe care să ateste că norma a fost înregistrată la un moment dat în trecut , în documentația oficială a MS [11] Adaugă mască de canal alfa biți. Adobe Photoshop
108 BITMAPV4HEADER Windows NT 4.0, 95 sau mai mare Adaugă tipul de engammacorrectie spațiu
124 BITMAPV5HEADER Windows NT 5.0, 98, sau mai târziu Adaugă profile de culoare ICC
Offset (hex) Offset (decembrie) Dimensiune (bytes) OS / 2 1.x BITMAPCOREHEADER [2]
0E 14 4 Mărimea acestui antet (12 bytes)
12 18 2 Lățimea bitmap în pixeli (fără semn pe 16 biți)
14 20 2 Înălțimea bitmap în pixeli (fără semn pe 16 biți)
16 22 2 Numărul de avioane de culoare, trebuie să fie 1
18 24 2 Numărul de biți per pixel
OS / 2 bitmapuri 1.x nu sunt comprimate și nu poate fi de 16 sau 32 BPP

Adăugați versiuni după câmpuri BITMAPCOREHEADER doar sfârșitul capului versiunii anterioare. De exemplu, BITMAPV2INFOHEADER adaugă câmpuri BitmapInfoHeader și BITMAPV3INFOHEADER adaugă câmpuri BITMAPV2INFOHEADER.

Un canal alfa integrat a fost lansat cu persoanele fără forme legale și documentate BITMAPV3INFOHEADER BITMAPV4HEADER (Windows 95) și este utilizat în Windows XP Log on și sistem de teme și Microsoft Office (din V2000); ea este susținută de unele software-ul de editare a imaginilor, cum ar fi Adobe Photoshop începând cu versiunea 7 și Adobe Flash începând cu versiunea MX 2004 (cunoscut sub denumirea de Macromedia Flash). Acesta este, de asemenea, susținută de GIMP, Google Chrome, Microsoft PowerPoint și Microsoft Word.

Din motive de compatibilitate, cele mai multe aplicații utilizează cele mai vechi antetele DIB pentru stocarea fișierelor. OS / 2 nu mai este suportat pe Windows 2000, deoarece acum formatul comun pentru Windows este antet BitmapInfoHeader. A se vedea tabelul de mai jos pentru descrierea. Toate valorile sunt stocate ca numere întregi fără semn, dacă nu este specificat în mod explicit.

Offset (hex) Offset (decembrie) Dimensiune (bytes) Ferestre din BitmapInfoHeader [1]
0E 14 4 dimensiunea acestui cap (40 bytes)
12 18 4 lățimea bitmap în pixeli (număr întreg semnat)
16 22 4 bitmap-ul în pixeli (număr întreg semnat)
1A 26 2 numărul de patch-uri (trebuie să fie 1)
1C 28 2 numărul de biți per pixel adâncimea de culoare a imaginii. Valorile tipice sunt de 1, 4, 8, 16, 24 și 32.
1E 30 4 Se utilizează metoda de compresie. A se vedea tabelul de mai jos pentru o listă de valori posibile
22 34 4 dimensiunea imaginii. Aceasta este dimensiunea datelor bitmap brute; un manechin 0 poate fi dat pentru bitmapuri BI_RGB.
26 38 4 rezoluția orizontală a imaginii. (Pixel pe metru, întreg semnat)
2A 42 4 rezoluția verticală a imaginii. (Pixel pe metru, întreg semnat)
2E 46 4 numărul de culori din paleta de culori, sau 0 la 2 standard n
32 50 4 numărul de culori majore utilizate 0 ca fiecare culoare este importantă; în general, ignorate

Un OS / 2 2.x OS22XBITMAPHEADER aka BITMAPCOREHEADER2 conține 24 de octeți suplimentari care nu sunt încă explicate. [2] Metoda de comprimare (offset 30) pot fi:

Valoare identificate prin metoda de compresie Comentarii
0 BI_RGB Nu Cel mai comun
1 BI_RLE8 RLE 8-biți / pixel Poate fi utilizat numai cu un 8-bit / pixel bitmapuri
2 BI_RLE4 RLE 4-bit / pixel Poate fi utilizat numai cu un 4-bit / pixel bitmapuri
3 BI_BITFIELDS OS22XBITMAPHEADER : Huffman 1D BITMAPV2INFOHEADER: RGB măști câmp de biți,
BITMAPV3INFOHEADER + : RGBA
4 BI_JPEG OS22XBITMAPHEADER : RLE 24 BITMAPV4INFOHEADER + : print imagine JPEG [12]
5 BI_PNG BITMAPV4INFOHEADER + : PNG pentru imprimare [12]
6 BI_ALPHABITFIELDS RGBA măști câmp de biți Numai pentru Windows CE 5.0 cu .NET 4.0 sau mai mare
11 BI_CMYK Nu Numai pentru Windows Metafișier CMYK [3]
12 BI_CMYKRLE8 RLE-8 numai Metafișier Windows CMYK
13 BI_CMYKRLE4 RLE-4 numai Metafișier Windows CMYK

tabel de culori

Tabelul de culori (paleta) intră în fișierul de imagine BMP imediat după antetul fișierului BMP, DIB antet (și după oricare trei bitmasks roșu, verde și albastru este folosit ca antetul BitmapInfoHeader cu opțiunea BI_BITFIELDS). Prin urmare, diferența este dimensiunea BITMAPFILEHEADER plus dimensiunea antetul DIB (și opțional 12 octeți pentru cele trei măști de biți).
Notă: Sub Windows CE cupa BitmapInfoHeader poate fi utilizat cu BI_ALPHABITFIELDS [5] , opțiunea în biCompression membru.

Numărul de intrări în paleta sau 2 n sau un număr mai mic specificat în antet (în formatul antet OS / 2 BITMAPCOREHEADER este acceptat paleta full-size). [2] [4] În cele mai multe cazuri, fiecare intrare în culoarea tabel ocupă 4 octeți, în ordinea albastru, verde, roșu, 0x00 ( a se vedea excepțiile de mai jos). Acest lucru este indexat în funcție de numărul de BitmapInfoHeader sub Bibit.

Tabelul de culori este un bloc de octeți (tabel), o listă a culorilor care sunt utilizate de imagine. Fiecare pixel este descrisă o culoare imagine indexată printr-un număr de biți (1, 4 sau 8), care este o măsură descrisă de o singură culoare, în acest tabel. Scopul paletei de culori din bitmap-uri de culoare indexate, aplicarea culorii reale care corespunde informa fiecare dintre aceste valori ale indicelui. Scopul tabelului de culori este non-indexate bitmap-uri (non-palettized) la numai culori care facilitează bitmap pentru scopul de optimizare pe dispozitive cu o capacitate limitată de ecran color și viitoare de conversie pentru diferite dimensiuni de pixeli, și paletization.

Culorile din tabelul de culori sunt de obicei descrise în 4-octet pentru fiecare element de format RGBA32. Tabelul de culori utilizate cu OS / 2 BITMAPCOREHEADER utilizează 3-octet per format articol RGB24. [2] [4] Pentru dibs încărcat în memorie, tabelul de culori poate consta fie din intrările de 2 octeți – aceste intrări sunt indici ai paleta realizată în prezent [7] , mai degrabă decât explicite definiții de culoare RGB.

Microsoft nu este prezența unui canal alfa biți masca interdicție validă [13] , în BITMAPV4HEADER și BITMAPV5HEADER pentru 1bpp, 4bpp și 8bpp indexate imagini color, indicând faptul că intrările din tabelul de culoare poate specifica , de asemenea , o componentă alfa folosind 8.8.8. [0-8]. [0-8] format prin RGBQUAD.rgbReserved [14] lid.Echter, unele versiuni ale documentației Microsoft interzice această funcție afirmând că elementul RGBQUAD.rgbReserved “ar trebui să fie zero.”

Nu După cum sa menționat mai sus, tabelul de culori este în mod normal ca pixelii din 16 biți per pixel (16 BPP) mărimea (și mai mare); Nu există în mod normal , intrări de tabel de culoare în care bitmap -ul fișiere imagine. Cu toate acestea, documentația Microsoft (pe site -ul Web MSDN ca din 16 noiembrie 2010 [15] ) prevede 16 bpp (și mai mare), tabelul de culori poate fi prezent pentru o listă de culori , care sunt destinate pentru aparate de optimizare a culorii magazin limitat de ieșire, în timp ce prevede , de asemenea , că , în astfel de cazuri , există alte opțiuni de paleta indexate sunt prezente în tabelul de culori. Acest lucru poate părea o contradicție în cazul în care nu există nici o distincție între liste obligatorii și opționale de intrări paletă de culori.

stocare pixel

Biții care sunt ambalate pixeli în rândurile bitmap. Mărimea fiecărui rând este rotunjită la un multiplu de 4 octeți (32 de biți) DWORD de umplutură.
Pentru imagini cu înălțime> 1, mai multe rânduri matlasate sunt stocate într -o succesiune, formând o matrice de pixeli.

Numărul total de octeți necesare pentru a fi stocate pentru un șir de pixeli, poate fi calculată ca:

{\ Stilul de afișare {\ mbox {ROWSIZE}} = \ left \ lfloor {\ frac {{\ mbox {BitsPerPixel}} \ cdot {\ mbox {Lățimea imaginii}} + 31} {32}} \ dreapta \ rfloor \ cdot 4}{\ Mbox ROWSIZE {}} = \ left \ lfloor {\ frac {{\ mbox {BitsPerPixel}} \ cdot {\ mbox {}} Imagine Lățime + 31} {32}} \ dreapta \ rfloor \ cdot 4
Lățimea imaginii este măsurată în pixeli, notați suporturile speciale.

Numărul total de octeți necesar pentru a stoca o matrice de pixeli într – un n biți per pixel (BPP), cu 2 n culori, poate fi calculată luând în considerare efectul de rotunjire mărimea fiecărui rând de un multiplu de 4 octeți, după cum urmează:

{\ Stilul de afișare {\ mbox {pixel Array Dimensiune}} = {\ mbox {ROWSIZE}} \ cdot \ left | {\ Mbox {}} Înălțimea imaginii \ dreapta \ vert}{\ {Mbox pixel Array Dimensiune}} = {\ mbox {ROWSIZE}} \ cdot \ left |  {\ Mbox {}} Înălțimea imaginii \ dreapta \ vert
Înălțimea imaginii este măsurată în pixeli. Valoarea absolută este necesară deoarece Înălțimea imaginii poate fi negativ.

Pixel matrice (date bitmap)

Matrice de pixeli este un bloc de DWORDs pe 32 de biți, care descrie pixel cu pixel de imagine. În mod normal , pixelii sunt stocate ” cu susul în jos” în raport cu ordinea normală de scanare de afișare raster, începând din colțul din stânga jos, trecând de la stânga la dreapta, iar apoi din rândul de jos pe rând la partea de sus a imaginii. [4] Dacă nu se utilizează BITMAPCOREHEADER, bitmap – uri comprimat pentru Windows stoca , de asemenea , de sus în jos, atunci când valoarea înălțimii imaginii negative.

În sistemul de operare original , / 2 DIB, numai patru valori valide adâncimea de culoare au fost 1, 4, 8 și 24 biți per pixel (BPP). [4] Permite recente formate pixel DIB Headers cu 1, 2, 4, 8, 16, 24 și 32 de biți per pixel (BPP). [16] GDI + permite , de asemenea , de 64 de biți per pixel. [17]

Bytes padding (nu neapărat 0) sunt adăugate la sfârșitul rândurilor , astfel încât lungimea rândurilor pentru a aduce un multiplu de patru octeți. În cazul în care matricea de pixeli este încărcat în memorie, fiecare rând trebuie să înceapă de la o adresă de memorie un multiplu de 4. Adresa de / compensare restricție numai matrice de pixeli obligatoriu în aplicație de stocare a fișierelor de memorie geladen.Voor are nevoie doar de dimensiunea fiecărui rând dintr – o multitudine de 4 octeți, în timp ce fișierul poziția poate fi arbitrară. [4] Un bitmap de 24 de biți , cu lățime = 1, va fi de aproximativ 3 octeți de date pe rând (cu albastru, verde, roșu) octet, și 1 din umplutura, în timp ce lățimea = 2 2 octeți de umplutură, lățime = 3 va fi de 3 octeți de umplutură ar avea, iar lățimea = 4 nu s- ar umplutură deloc.

Comprimare

  • imagini color indexate pot fi comprimate până la 4-biți sau 8 biți RLE sau Huffman 1D algoritm.
  • OS / 2 imagini BITMAPCOREHEADER2 24bpp poate fi comprimat cu algoritmul RLE de 24 de biți.
  • Cele 16 bpp și imaginile sunt 32 bpp stocate în continuare necomprimat.
  • Rețineți că imaginile pot fi stocate în toată profunzimea culorii, fără compresie, dacă se dorește.

Format pixel

Într-un fișier de imagine bitmap pe un disc sau o imagine bitmap în memorie, pixelii poate fi definită printr-un număr variabil de biți.

  • 1-bit per pixel format (1bpp) suportă două culori diferite ( de exemplu , alb – negru). Valorile pixelilor sunt stocate în fiecare bit, în care primul (cel mai din stânga) pixelul în cel mai semnificativ bit al primului octet. [4] Fiecare bit este un index într – un tabel de 2 culori. Un bit dezactivat se va referi la prima intrare a tabelului de culori, și un set de biți se va referi la ultima intrare tabel de culori ( a doua).
  • 2-bit per pixel format (2bpp) suportă patru culori diferite și magazine cu patru pixeli pe un octet, lateral stânga pixel în doi biți mai semnificativi (Windows CE numai: [18] ) .Each valoare a pixelilor este un indice de 2- biți într – un tabel de până la 4 culori.
  • 4-bit per format pixel (4bpp) suporta 16 culori diferite și magazine cu 2 pixeli pe un octet, cel mai din stânga pixel din mai semnificativ ciuguli. [4] Fiecare valoare a pixelilor este un indice de 4 biți într – un tabel de până la 16 culori.
  • 8-bit per pixel format (8bpp) suporta 256 de culori și magazine cu 1 pixel cu 1 octet. Fiecare octet este un index într-un tabel de până la 256 de culori.
  • 16-bit per format pixel (16 BPP) suportă 65.536 culori și magazine 1 pixel per 2-octet cuvânt. Fiecare cuvânt poate avea alfa, roșu, verde, albastru și determină mostre de pixel.
  • 24-bit pixel format (24 BPP) sprijină 16.777.216 culori și stochează o valoare de un pixel pe 3 Valoarea bytes.Each pixeli determină probele de roșu, verde și albastru de pixel (în RGBAX 8.8.8.0.0 notație). Mai exact, în ordine:. Albastru, verde și roșu (8 biți pe fiecare probă) [4]
  • 32-bit per format pixel (32 BPP) sprijină 4,294,967,296 diferite culori si magazine 1 pixel pe DWORD 4-byte. Fiecare DWORD poate determina alfa, probele de roșu, verde și albastru de pixel.

Ambiguitatea care determină biții care probele de antetele DIB oferă anumit standard și câmp de biți specific, care mușcă măști că compoziția anumitor grupuri de biți într-un pixel, definind un canal dat sunt rezolvate. Graficul de mai jos definește acest mecanism:

Diag.  2 - Câmpul de biți mecanism pentru un pixel pe 32 de biți reprezentată în eșantion notație RGBAX
Diag. 2 – Câmpul de biți mecanism pentru un pixel pe 32 de biți reprezentată în eșantion notație RGBAX

Câmpurile de eșantionare definite de măștile de biți câmp de biți sunt învecinate și care nu se suprapun, dar secvența câmpurilor eșantion aleatoriu. Câmpul omniprezentă este ordine: Alpha, albastru, verde, roșu (MSB la LSB). Măștile de biți de culoare roșie, verde și albastru sunt valabile numai în cazul în care elementul de comprimare a colectorului DIB este setat la BI_BITFIELDS. Alfa bitmask validă când este prezentă în antetul DIB, sau atunci când elementul de comprimare a colectorului DIB BI_ALPHABITFIELDS este setat la [5] (Windows CEonly).

Diag.  3 - format pixeli, cu un canal alfa pentru ca un pixel de 16 biți (în format probă RGBAX), de fapt, Adobe Photoshop a generat [19]
Diag. 3 – format pixeli , cu un canal alfa pentru ca un pixel de 16 biți (în format probă RGBAX) , de fapt , Adobe Photoshop a generat [19]
Toate formatele posibile ale pixelilor într-un DIB
Toate formatele posibile ale pixelilor într-un DIB

Subtipuri video RGB [ edit ]

Mecanismul de mai sus descris bitfield permite definirea a zeci de mii de diferite formate de pixeli, dar numai unele dintre ele sunt folosite în practică, [19] toate palettized formatele RGB8, RGB4 și RGB1 (evidențiată în galben , tabelul de mai sus, dshow.hMEDIA SUB-nume) și:

RGB necomprimate VIDEO subtipurile [20]
RGBAX subtip RGB RGBAX subtip ARGB
8.8.8.0.8 RGB32 8.8.8.8.0 ARGB32
10.10.10.2.0 A2R10G10B10
8.8.8.0.0 RGB24 10.10.10.2.0 A2B10G10R10
5.6.5.0.0 RGB565 4.4.4.4.0 ARGB4444
5.5.5.0.1 RGB555 5.5.5.1.0 ARGB1555
DOMENII BIT TEN BIT RGB [20]
câmp de biți compensa BitsA2R10G10B10 BitsA2B10G10R10
roșu 36h 00 00 F0 3F LE: 3FF00000 2029 FF 03 00 00 LE: 000003FF  0 9
Verde 3aH 00 FC 0F 00 LE: 000FFC00 1019 00 FC 0F 00 LE: 000FFC00 1019
Albastru 3EH FF 03 00 00 LE: 000003FF  0 9 00 00 F0 3F LE: 3FF00000 2029
Alfa 42h 00 00 00 C0 LE: C0000000 3031 00 00 00 C0 LE: C0000000 3031

În versiunea 2.1.4 de sprijin FFmpeg (în propria terminologie) a pixelilor BMP formate bgra, bgr24, rgb565le, rgb555le, rgb444le, RGB8, bgr8, rgb4_byte, bgr4_byte, gri, pal8, și monob , adică, bgra era singura suportată formatul în pixeli cu transparență. [21]

exemplul 1

Mai jos este un exemplu de 2 × 2 pixeli, 24-biți bitmap (Windows DIB antet BitmapInfoHeader) format pixel RGB24.

compensa mărimea Valoarea hex Valoare Descriere
BMP antet
0h 2 42 4D “BM” câmp ID-ul (42h, 4DH)
2h 4 46 00 00 00 70 bytes (54 + 16) Mărime fișier BMP
6h 2 00 00 nefolosit specifice aplicației
8h 2 00 00 nefolosit specifice aplicației
Ah 4 36 00 00 00 54 bytes (14 + 40) În cazul în care pot compensa fi găsit matrice de pixeli (date bitmap)
DIB antet
Hei 4 28 00 00 00 40 bytes Numărul de octeți în antetul DIB (de aici)
12h 4 02 00 00 00 2 pixeli (de la stânga la dreapta comanda) Lățimea de bitmap în pixeli
16h 4 02 00 00 00 2 pixeli (de jos la secvența de sus) Înălțimea de bitmap în pixeli. bottom pozitiv la comanda pixelilor de sus.
1AH 2 01 00 1 avion Numărul de patch-uri de culoare sunt utilizate
1CH 2 18 00 24 biți Biți per pixel
1EH 4 00 00 00 00 0 nu BI_RGB utilizează comprimarea matrice de pixeli
22h 4 10 00 00 00 16 bytes Dimensiunea datelor bitmap brute (inclusiv umplutură)
26h 4 13 0B 00 00 2835 pixeli / m pe orizontală Rezoluția de imprimare a imaginii,
72 dpi × 39.3701 inchi pe venituri metru 2834.6472
2Ah 4 13 0B 00 00 2835 pixeli / metru vertical
2EH 4 00 00 00 00 0 culoare Numărul de culori din paleta
32h 4 00 00 00 00 0 culori importante 0 înseamnă că toate culorile sunt importante
Început de matrice de pixeli (date bitmap)
36h 3 00 00 FF 0 0 255 Pixel roșu (0,1)
39h 3 FF FF FF 255 255 255 Alb, pixeli (1,1)
3CH 2 00 00 0 0 Padding pentru 4 aliniere octet (poate fi o altă valoare decât zero)
3EH 3 FF 00 00 255 0 0 Albastru, Pixel (0,0)
41h 3 00 FF 00 0255 0 Green Pixel (1,0)
44h 2 00 00 0 0 Padding pentru 4 aliniere octet (poate fi o altă valoare decât zero)

exemplul 2

Mai jos este un exemplu de 4 × 2 pixeli, pe 32 de biți bitmap cu valori de opacitate în canalul alfa (Windows DIB Antet BITMAPV4HEADER), cu o dimensiune a pixelilor ARGB32.

compensa mărimea Valoarea hex Valoare Descriere
BMP antet
0h 2 42 4D “BM” câmp ID-ul (42h, 4DH)
2h 4 9A 00 00 00 154 octeți (122 + 32) Mărime fișier BMP
6h 2 00 00 nefolosit specifice aplicației
8h 2 00 00 nefolosit specifice aplicației
Ah 4 7A 00 00 00 122 octeți (14 + 108) În cazul în care pot compensa fi găsit matrice de pixeli (date bitmap)
DIB antet
Hei 4 6C 00 00 00 108 octeți Numărul de octeți în antetul DIB (de aici)
12h 4 04 00 00 00 4 pixeli (de la stânga la dreapta comanda) Lățimea de bitmap în pixeli
16h 4 02 00 00 00 2 pixeli (de jos la secvența de sus) Înălțimea de bitmap în pixeli
1AH 2 01 00 1 avion Numărul de patch-uri de culoare sunt utilizate
1CH 2 20 00 32bit Biți per pixel
1EH 4 03 00 00 00 3 BI_BITFIELDS nu folosesc compresie cu matrice de pixeli
22h 4 20 00 00 00 32 octeți Dimensiunea datelor bitmap brute (inclusiv umplutură)
26h 4 13 0B 00 00 2835 pixeli / m pe orizontală Rezoluția de imprimare a imaginii,
72 dpi × 39.3701 inchi pe venituri metru 2834.6472
2Ah 4 13 0B 00 00 2835 pixeli / metru vertical
2EH 4 00 00 00 00 0 culoare Numărul de culori din paleta
32h 4 00 00 00 00 0 culori importante 0 înseamnă că toate culorile sunt importante
36h 4 00 00 FF 00 00FF0000 în big-endian bit canal roșu masca (validă deoarece BI_BITFIELDS este specificat)
3aH 4 00 FF 00 00 0000FF00 în big-endian masca bit canal verde (valabil pentru că BI_BITFIELDS este specificat)
3EH 4 FF 00 00 00 000000FF în big-endian bit canal albastru masca (validă deoarece BI_BITFIELDS este specificat)
42h 4 00 00 00 FF Ff000000 în big-endian Bit masca de canal alfa
46h 4 20 6E 69 57 little-endian ‘ Win LCS_WINDOWS_COLOR_SPACE
4Ah 24h 24h* 00...00 Obiective Space CIEXYZTRIPLE Color Neutilizat pentru LCS ‘ Win‘ sau ‘ sRGB
6EH 4 00 00 00 00 0 Red Gamma Neutilizat pentru LCS ‘ Win‘ sau ‘ sRGB
72h 4 00 00 00 00 0 Green Range Neutilizat pentru LCS ‘ Win‘ sau ‘ sRGB
76H 4 00 00 00 00 0 Albastru Gamă Neutilizat pentru LCS ‘ Win‘ sau ‘ sRGB
Început de Pixel Array (date bitmap)
7Ah 4 FF 00 00 7F 255 0 0 127 Albastru (Alpha 127) Pixel (0,1)
7Eh 4 00 FF 00 7F 0255 0127 Green (Alpha 127) Pixel (1,1)
82H 4 00 00 FF 7F 0 0255127 Roșu (Alpha 127) Pixel (2,1)
86H 4 FF FF FF 7F 255 255 255 127 Alb (Alpha 127) Pixel (3,1)
8AH 4 FF 00 00 FF 255 0 0 255 Albastru (Alpha: 255) Pixel (0,0)
8EH 4 00 FF 00 FF 0255 0255 Verde (Alpha: 255) Pixel (1,0)
92H 4 00 00 FF FF 0 0255255 Roșu (Alpha: 255) Pixel (2,0)
96h 4 FF FF FF FF 255 255 255 255 Alb (Alpha: 255) Pixel (3,0)

Rețineți că datele bitmap începând cu colțul din stânga sus al imaginii.

Utilizarea formatului BMP

Simplitatea formatului BMP, precum și difuzarea de cunoștințe în Windows și în alte părți, precum și faptul că acest format este relativ bine documentat și lipsit de brevete de invenție, un format foarte comun face ca programele de procesare de la mai multe sisteme de operare pot citi și scrie . Fișierele ICO și CUR conțin bitmapuri începe cu un BitmapInfoHeader.

Multe interfete mai vechi de utilizator grafice utilizate bitmap – uri în subsistemele lor grafice încorporate; [22] De exemplu, Microsoft Windows și subsistemul GDI OS / 2 platforme, care formatul specific utilizat este Windows și / 2 format de fișier bitmap OS , de obicei numele cu extensia .BMP. [23]

În timp ce cele mai multe dintre fișierele BMP au cauzat o dimensiune relativ mare fișier lipsei de compresie (sau, în general, un raport mic de codificare a lungimii de execuție pe imagini paletizate), o mulțime de fișiere BMP pot fi comprimate în mod substanțial, cu algoritmi de compresie fără pierderi a datelor , cum ar fi ZIP, deoarece acestea conțin date redundante. Unele formate, cum ar fi RAR, chiar include rutine orientate în mod specific la o comprimare eficientă a acestor date.

formate asemanatoare

Sistemul X Window utilizează un format XBM similar pentru imagini alb – negru și XPM ( pixelmap ) pentru imagini color. Există , de asemenea , o serie de formate “brute”, care stochează date brute, fără alte informații. Există pixmap portabil (PPM) și TrueVision TGA formate, dar sunt utilizate mai puțin frecvent – sau numai în scopuri speciale, de exemplu, TGA pot conține informații de transparență.

referinte

  1. ^ Mergi la: a b c James D. Murray; William vanRyper (aprilie – 1996). “Enciclopedia Grafică Formate de fișier” ( a doua ed.). O’Reilly. bmp. ISBN 1-56592-161-5 . Primit 07/03/2014 .
  2. ^ Mergi la: a b c d e f g James D. Murray; William vanRyper (aprilie – 1996). “Enciclopedia Grafică Formate de fișier” ( a doua ed.). O’Reilly. os2bmp. ISBN 1-56592-161-5 . Primit 07/03/2014 .
  3. ^ Mergi la: a b “[MS-WMF]:. Metafișier Windows Format” MSDN 0.2014 / 02/13 . Primit 12/03/2014 .
  4. ^ Mergi la: a b c d e f g h i j “. Dibs și aplicațiile lor” Ajutor și asistență Microsoft . Primit 14/05/2015 .
  5. ^ Mergi la: a b c MSDN – BitmapInfoHeader (Windows CE 5.0) BI_ALPHABITFIELDS în membru biCompression
  6. ^ Mergi la: a b c Tipuri de MSDN Bitmap antet
  7. ^ Mergi la: a b c MSDN BITMAPINFO Structura
  8. Sari ^ Fengyuan – Windows programare grafică: Win32 GDI si DirectDraw: Dispozitiv Prânz Independent Bitmap (CreateDIBPatternBrush, CreateDIBPatternBrushPt, Find Resource, Resource Load, Lock Resource)
  9. Sari în sus ^ Summers, Jason (30/10/2015). “Pal8os2v2-16.bmp” .Ontvangen 07/06/2016 .
  10. Sari în sus ^ Summers, Jason (30/10/2015). “BMP Suite” . Primit 07/06/2016 .
  11. Sari ^ Chris Cox (2010-11-15). “Format nevalid BMP cu Alpha canal”. Photoshop pentru Windows pe forum .Adobe .Gearchiveerd a originalului pe 27/01/2015 . Primit 22/05/2016 .
  12. ^ Mergi la: a b “extensiile JPEG și PNG pentru funcții Bitmap specifice și structurilor”.
  13. Sari ^ MSDN – BITMAPV4HEADER: Membrul bV4AlphaMask
  14. Sari ^ MSDN – RGBQUAD: membru rgbReserved
  15. Sari ^ A se vedea notamai jos biClrUsedMSDN BitmapInfoHeader
  16. Sari ^ MSDN – BitmapInfoHeader: Contele membru BIBIT
  17. Sari ^ “tipuri” bitmap – uri. MSDN. 2012-06-03 . Primit 16/03/2014 .
  18. Sari ^ MSDN: Windows CE – Structura BitmapInfoHeader
  19. ^ Mergi la: a b Adobe Photoshop: BMP format
  20. ^ Mergi la: un b “RGB necomprimate video Subtipuri”. Dshow.h .MSDN . Primit 11/03/2014 .
  21. Sari ^ “formate”. Documentation FFmpeg general . 2014 . Adus de 23/02/2014 .
  22. Sari ^ Julian inteligent; Stefan Csomor & Kevin Hock (2006). Cross-Platform GUI programare cu wxWidgets . Prentice Hall. ISBN 0-13-147381-6.
  23. Sari în sus ^ “Bitmap Image File (BMP), versiunea 5”. Digital Conservarea .Library Congresului. 08/01/2014 .Received 11/03/2014 .