Bitmap Windows

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Windows bitmap (BMP) / bitmap independent de dispozitiv (DIB)
Dezvoltat de Microsoft
Licență Fără brevet
Tip imagini raster fără compresie / RLE
Comprimare Necomprimat
Site-ul web www.microsoft.com

Ferestre bitmap este un format de date utilizate pentru a reprezenta imagini raster pe Microsoft Windows sisteme de operare . În general , cunoscut ca un format de fișier , acesta a fost introdus cu Windows 3.0 în 1990 .

Bitmapuri, ca imagine fișiere de acest tip sunt numite în mod obișnuit, au în general, extensia .BMP, sau mai puțin frecvent .dib (bitmap-dispozitiv independent).

Caracteristici

Au fost dezvoltate trei versiuni ale formatului bitmap. Prima și cea mai frecvent utilizată este versiunea 3: nu există versiuni anterioare. Versiunile ulterioare 4 și 5 sunt întâlnite destul de rar.

Versiunea 3

Windows bitmap format de fișier în versiunea 3 permite foarte rapid și operații de citire și scriere fără pierderi, dar , în general , necesită mai multă memorie decât alte formate similare.

Imaginile bitmap pot avea o adancime de 1, 4, 8, 16, 24 sau 32 de biți per pixel . Bitmapuri cu 1, 4 și 8 biți conțin o paletă pentru conversia (2, 16 și 256 respectiv) , posibili indici numerici în culorile respective. În imagini cu adâncimi mai mari, culoarea nu este indexat dar codificat direct în sale RGB componente cromatice; cu 16 sau 32 de biți pe pixel, unii biți pot rămâne neutilizați.

Versiunea 3 a formatului nu are suport pentru alfa canal , corecție de culoare, sau metadate .

Versiunile 4 și 5

Cu Windows 95 și Windows 98 Microsoft a introdus noi versiuni 4 și 5 din formatul bitmap, care susțin canalul alfa și definirea personalizate spații de culoare . Versiunea 5 oferă , de asemenea , posibilitatea de a utiliza un profil de culoare într - un extern fișier și încorpora JPEG și PNG imagini . Cu toate acestea, aceste noi formate sunt foarte rar găsit ca fișiere independente și multe aplicații nu sunt în măsură să le recunoască; utilizarea lor principală este ca un format intern pentru Windows joc video sau programe [1] .

Structura

Antetul fișierului
(BITMAPFILEHEADER)
Bloc informativ
(BITMAPINFO):
Antet bitmap
(BitmapInfoHeader)

eventual: model de culoare

eventual: paleta
eventual: spațiu neutilizat
harta pixelilor
eventual: spațiu neutilizat

Structura unui bitmap

Pe disc, imaginile bitmap sunt codificate cu ajutorul unor simple , structuri care descriu proprietățile lor. Toate valorile sunt puțin endian ordine.

BITMAPFILEHEADER
Acesta este antetul bitmap care conține informații despre octet dimensiunea fișierului și offsetul de la începutul fișierului al primului octet din pixeli hartă. Această structură este absent când bitmap este integrat ca o resursă în cadrul unei aplicații sau bibliotecă .
BITMAPINFOHEADER
Dimensiunile pixelilor imaginii și numărul de culori utilizate sunt prezentate aici. Informațiile se referă la dispozitivul pe care a fost creat bitmap-ul. De asemenea , în această structură sunt indicate , de asemenea, pe orizontală și pe verticală rezoluția dispozitivului de ieșire: aceste valori, împreună cu cele ale lățimea și înălțimea în pixeli, determină dimensiunea de imprimare a imaginii în dimensiune reală.
model de culoare
Cu versiunile 4 și 5 din formatul bitmap, blocul de informații a fost extins cu structuri care vă permit să definiți propriile modele de culoare . În practică, aceste structuri sunt mai puțin frecvente.
paletă
Această structură este o matrice care se potrivește cu o culoare pentru fiecare indice care poate fi atribuit unui pixel. În paleta, fiecare culoare este reprezentată printr - o structură de 4 octeți (RGBQUAD), unul fiecare pentru roșu , verde și componentele albastru , plus un octet nefolosit. În cazul imaginilor cu 16, 24 sau 32 biți pe pixel, acest tabel de culori nu este necesar, deoarece culoarea pixelilor nu este indexată, ci codificată direct în componentele sale.
harta pixelilor
Această structură de date constituie corpul real al bitmap-ului, în care fiecare pixel este asortat de o culoare sub forma unui index în paletă sau în componentele sale cromatice. Dacă dimensiunea în octeți a liniilor orizontale nu este un multiplu de 4, acestea sunt prelungite cu octeți nuli. În versiunea 5 a formatului bitmap această structură poate încorpora , de asemenea , JPEG și PNG imagini .

In cel mai caz comun al bitmapuri în versiunea 3 a formatului necomprimat și fără o paletă în plus pentru adâncimi mai mari de 8 biți per pixel, dimensiunea în octeți cerut de fișier poate fi exprimată cu următoarea matematică formulă , unde w și respectiv h indică lățimea și înălțimea imaginii în pixeli și b adâncimea în biți per pixel.

Cu ne - am indicat funcția pas de Heaviside , a cărui valoare este 0 pentru argumente negative , și 1 pentru cele pozitive. indică faptul că funcția de plafon, echivalent cu cel mai mic număr întreg mai mare sau egal cu argumentul.

Aceeași expresie poate fi formulată mai simplu în limbaj C cum ar fi aceasta:

 54 + 4 * (((1 << b) & 0xffff) + h * ((w * b + 31) / 32))

Structura detaliată

BITMAPFILEHEADER (dimensiune: 14 bytes)
decalaj tip Nume conţinut
0 Cuvânt bfType ASCII șirul "BM" (valoare zecimală 16973, hexazecimal 424D)
2 Dword bfSize dimensiunea fișierului (nesigură)
6 Dword bfRezervat 0
10 Dword bfOffBits offset de primul octet al pixelilor hărții de la începutul fișierului
BitmapInfoHeader (dimensiune: 40 bytes)
decalaj tip Nume conţinut
0 Dword biSize dimensiunea în octeți a blocului de informații împreună cu structurile pentru modelul de culoare adăugate în versiunile 4 și 5:
versiunea 3
40 (hex 28))
versiunea 4
108 (hex 6C)
versiunea 5
124 (hex 7C)
4 LUNG biWidth lățimea imaginii în pixeli
8 LUNG biHeight Corespunde valoare absolută la înălțimea imaginii în pixeli :
când valoarea este pozitivă
imaginea este de jos în sus (de pixeli harta începe din rândul de jos de pixeli și se termină cu partea de sus unul). Aceasta este cea mai comună variantă.
când valoarea este negativă
imaginea este-sus în jos (de pixeli harta începe din rândul de sus de pixeli și se termină cu cea de jos).
12 Cuvânt biPlanuri întotdeauna 1
14 Cuvânt biBitCount adâncimea de culoare a imaginii în biți per pixel , trebuie să fie una dintre următoarele valori: 1, 4, 8, 16, 24 sau 32. În cazul 1, 4 sau 8 biți per pixel culorile sunt indexate. Valorile 16 și 32 sunt mai puțin frecvente. În versiunea 5 a formatului, valoarea 0 poate fi utilizat atunci când încapsularea JPEG sau PNG .
16 Dword biCompresie una dintre următoarele valori:
0 (BI_RGB)
Pixeli Harta nu este comprimat.
1 (BI_RLE8)
Pixeli Harta este comprimat cu RLE algoritmul de 8 biți per pixel. Valabil numai pentru biBitCount = 8 și biHeight> 0.
2 (BI_RLE4)
Pixeli Harta este comprimat cu RLE algoritmul de 4 biți per pixel. Valabil numai pentru biBitCount = 4 și biHeight> 0.
3 (BI_BITFIELDS)
Pixeli Harta nu este comprimat și este codat în conformitate cu măști de culori personalizate. Valabil numai pentru biBitCount = 16 sau 32; neobișnuit.

În versiunea 5 a formatului, sunt permise și următoarele valori:

4 (BI_JPEG)
Bitmap încapsulează o imagine în format JPEG format.
5 (BI_PNG)
Bitmap încapsulează o imagine în PNG format.
20 Dword biSizeImage

Indică dimensiunea în octeți de pixeli tampon hartă. Această valoare poate fi lăsată la zero atunci când biCompression este setat la BI_RGB.

24 LUNG biXPelsPerMeter orizontală rezoluția dispozitivului de ieșire în pixeli per metru ; 0 dacă rezoluția nu este specificată.
28 LUNG biYPelsPerMeter verticală rezoluția dispozitivului de ieșire în pixeli per metru ; 0 dacă rezoluția nu este specificată.
32 Dword biClrUsed
când biBitCount = 1
0
când biBitCount = 4 sau 8
numărul de potriviri utilizate efectiv în paleta de culori; 0 indică numărul maxim (16 sau 256).
in caz contrar
numărul de potriviri din paleta de culori (0 = fără paletă). Pentru adâncimi mai mari de 8 biți per pixel, paleta nu este necesară în mod normal, dar când există acesta poate fi utilizat de către sistem sau de unele programe pentru a optimiza reprezentarea imaginii.
36 Dword biClrImportant
când biBitCount = 1, 4 sau 8
numărul de culori utilizate în imagine; 0 indică toate culorile din paletă.
in caz contrar
dacă paleta există și conține toate culorile utilizate în imagine
numărul de culori
in caz contrar
0

Cu versiunile 4 și 5 ale formatului, Microsoft a extins blocul de informații adăugând câmpuri noi la sfârșitul structurii versiunii anterioare. Documentația privind formatul acestor noi versiuni este disponibilă în Biblioteca MSDN.

BITMAPINFOHEADER BITMAPV4HEADER BITMAPV5HEADER octet
biSize bV4Size bV5Size 4
biWidth bV4Width bV5Lățime 4
biHeight bV4Height bV5Height 4
biPlanuri bV4Planes bV5Planes 2
biBitCount bV4BitCount bV5BitCount 2
biCompresie bV4V4Compression bV5Compresie 4
biSizeImage bV4SizeImage bV5SizeImage 4
biXPelsPerMeter bV4XPelsPerMeter bV5XPelsPerMeter 4
biYPelsPerMeter bV4YPelsPerMeter bV5YPelsPerMeter 4
biClrUsed bV4ClrUsed bV5ClrUsed 4
biClrImportant bV4ClrImportant bV5ClrImportant 4
bV4RedMask bV5RedMask 4
bV4GreenMask bV5GreenMask 4
bV4BlueMask bV5BlueMask 4
bV4AlphaMask bV5AlphaMask 4
bV4CSType bV5CSType 4
bV4Endpoints bV5Puncte finale 36
bV4GammaRed bV5GammaRed 4
bV4GammaGreen bV5GammaGreen 4
bV4GammaBlue bV5GammaBlue 4
bV5Intent 4
bV5ProfileData 4
bV5ProfileSize 4
bV5 Rezervat 4

Avantaje și dezavantaje

Una dintre caracteristicile esențiale ale formatului bitmap , care au făcut - o atât de norocos pentru o lungă perioadă de timp este viteza cu care imaginile sunt citite sau scrise pe disc, care este mai mare în comparație cu cea a altor tipuri de fișiere , în special pe mașinile mai lent. În bitmapuri necomprimate, reprezentarea datelor în memoria RAM de memorie este în mare măsură similară, de multe ori identice, cu cea a datelor pe disc: a procesorului nu este obligat să efectueze calcule laborioase în timpul codificării și operațiile de decodare și timpul de acces la date este adesea limitată doar de unitatea de hardware .

Dimensiunea octeților aceleiași imagini (128 culori) în diferite formate raster
Smiley head happy.png
necomprimate BMP
24030
comprimat BMP
8764
GIF
5365
PNG
4029

Există , de asemenea, dar nu este utilizat pe scară largă, capacitatea de a comprima 16 și 256 de culori bitmap - uri cu RLE algoritmul . Cu toate acestea, RLE de compresie nu este la fel de eficientă ca și alte compresie fără pierderi metode. Bitmapuri, chiar și cele comprimat, de obicei , ocupă mai mult spațiu pe disc decât alte raster formate , cum ar fi GIF sau PNG , și sunt , prin urmare , mai puțin adecvate decât acestea pentru transmiterea de imagini prin Internet sau pentru depozitare permanenta pe CD - uri , DVD - uri sau alte suporturi de date..

O limitare serioasă a formatului bitmap, cel puțin în versiunea comună 3, este că nu acceptă niciun fel de transparență. Pentru a depăși această problemă, au fost dezvoltate mai multe trucuri, cum ar fi utilizarea unei culori speciale pentru pixelii transparenți, sau folosind alte bitmap - uri pentru a masca părțile invizibile ale unei imagini (unele dintre aceste tehnici pot fi găsite în același Windows API ), dar nici unul oferă aceeași versatilitatea canalului alfa , a cărui difuzie este legată în principal de apariția formatului PNG.

În ciuda dimensiunea fișierului mai mare și lipsa de sprijin transparență, există mai mulți factori care au contribuit în mod semnificativ la popularitatea bitmap - urilor: formatul este simplu, bine documentat, și nu sunt protejate de brevete care restricționează utilizarea gratuită. Mai ales acest ultim punct a însemnat că formatul bitmap este acum susținută de aproape toate grafice aplicații , inclusiv multe open source programe chiar și dincolo de granițele Microsoft lumii.

Utilizări practice

Cu toate că , în multe privințe învechita învechite, formatul de imagine bitmap deține un record pe de Windows sisteme pentru istorice și înapoi de compatibilitate motive. Este pentru această situație, legată de popularitatea de Windows pentru computere personale , care continuă să fie bitmap - uri utilizate pe scară largă și astăzi, deși acestea sunt disponibile pentru aproape toate nevoile cele mai bune alternative.

Procesarea imaginii

Rapide și voluminoase, bitmap-urile sunt potrivite în special pentru stocarea temporară a imaginilor care sunt adesea modificate. Multe ferestre de scanare software - ul salvează imaginile ca fișiere bitmap scanate în mod implicit.

Internet

Formatul bitmap pare a fi inadecvat pentru Internet din mai multe motive:

  • Imaginile bitmap sunt mai mari în termeni de memorie decât echivalentele lor în alte formate, astfel încât acestea să dureze mai mult pentru a transmite.
  • Pe sistemele de operare altele decât Windows, multe browsere și clienți de e-mail sunt în imposibilitatea de a afișa imagini în acest format.
  • Formatul bitmap, cel puțin în versiunea comună 3 la, nu suportă nici un fel de transparență, stabilirea unor limite privind posibilitățile de web design .

Bitmap în programare

Pe de Windows de operare sisteme , bitmap - uri sunt, chiar înainte de fișiere , obiecte folosite intern de către GDI interfața grafică . Mai multe limbaje de programare , prin urmare , pentru Windows au dezvoltat abstractizari specifice pentru acest tip de date.

API Windows

Cele API Windows oferte de la primele versiuni speciale funcții care vă permit să efectuați cele mai simple operații pe bitmap - uri, cum ar fi copierea sau combinarea părți ale unei imagini în memorie. Bitmapuri sunt obiecte GDI precum și fonturi (fonturi), perii (perii) si palete (palete); precum și alte obiecte pentru Windows, bitmap - uri sunt manipulate printr - un mâner, care este o valoare care identifică obiectul în execuție mediu. După ce a fost creat prin apelarea funcțiilor corespunzătoare, bitmap - uri sunt selectate într - un context dispozitiv, o entitate abstractă , care servește pentru a comunica cu un dispozitiv sau dispozitiv virtual. În acest fel, informațiile pot fi trimise la un monitor sau imprimantă . Prin selectarea unui bitmap într - un context dispozitiv de memorie, acesta este de asemenea posibil pentru a apela funcțiile GDI corespunzătoare pentru a face cele mai multe modificări obișnuite imaginii. Pentru mai multe operații grafice de complexitate, pixeli harta poate fi accesat direct.

Limbaje de programare de nivel înalt folosi parțial funcțiile API pentru a pune în aplicare grafice de programare tehnici cu bitmap - uri.

.NET

.NET Framework ofera suport nativ pentru diferite tipuri de imagini raster, și, desigur , de asemenea , pentru bitmapuri prin System.Drawing.Image.Bitmap clasa . Visual Studio .NET mediu de dezvoltare vă permite să inserați un bitmap pe fundalul unui formular sau a unei componente , pur și simplu prin selectarea calea într - o listă de proprietate. Această tehnică, care datează din primele încarnări ale Visual Studio , a lucrat inițial doar cu bitmap - uri și a fost apoi extins la alte tipuri de imagini.

Java

Spre deosebire de .NET Framework , care a fost dezvoltat de Microsoft special pentru Windows, Java isi propune sa fie un multi-platforma de sistem, pentru a se asigura că același program de lucrări la fel pe toate platformele de la diferiți producători. Prin urmare, nu este surprinzător faptul că nu există o clasă specifică în Java, așa cum există în .NET, pentru manipularea formatului de bitmap Windows. Cu toate acestea, există unele biblioteci și module suplimentare de programare care implementează aceste caracteristici și pot fi găsite pe internet .

C / C ++

Printre remarcat C , C ++ biblioteci pentru manipularea imaginii, putem găsi FreeImage , o cross-platform open source de bibliotecă, care suportă un număr mare de formate și funcții.

Delphi

De la prima ediție a Delphi , obiectul TBitmap este prezent în VCL (Visual Component Library), care vă permite să manipuleze fișiere bitmap. Există , de asemenea , proiecte externe la Delphi, care extinde potențialul și funcționalitatea obiectului TBitmap, printre acestea ne amintim Graphics32 , Proiectul JEDI și GLScene .

Piton

Chiar și prin Python limbaj este posibil de a manipula imagini: între bibliotecile disponibile, vom găsi PIL arhivării la 2 aprilie 2012 , în WebCite . și FreeImagePy , pe baza FreeImage

 de la CoreGraphics import *
import matematica

# Creați un context bitmap transparent RGB, cu un fundal negru de 256x256
cs = CGColorSpaceCreateDeviceRGB ()
c = CGBitmapContextCreateWithColor (256, 256, cs, (0, 0, 0, 0))

# Creați un pătrat galben cu o linie roșie care rulează în jurul perimetrului său
c. saveGState ()
c. setRGBStrokeColor (1, 0, 0, 1) # roșu
c. setRGBFillColor (1, 1, 0, 1) # galben
c. setLineWidth (3)
c. setLineJoin (kCGLineJoinBevel)
c. addRect (CGRectMake (32,5, 32,5, 191, 191))
c. drawPath (kCGPathFillStroke);
c. restoreGState ()

# Adăugați text rotit

c. saveGState ()
c. translateCTM (128, 128)
c. rotateCTM (matematica radiani (-. 30.0))
c. translateCTM (- 128, - 128)
c. setRGBStrokeColor (0, 0, 0, 1)
c. setRGBFillColor (1, 1, 1, 1)
c. selectFont ( "Helvetica", 36, kCGEncodingMacRoman)
c. setTextPosition (40, 118)
c. setTextDrawingMode (kCGTextFillStroke)
c. setShadow (CGSizeMake (0 - 10), 2)
c. showText ( "Bună ziua, lume", 12)
c. restoreGState ()

# Salvați imaginea în format .png

c. writeToFile ( "out.png", kCGImageFormatPNG)

Notă

Bibliografie

  • Comprimate Formate de imagine File - John Miano, Addison-Wesley Professional, 1999 - ISBN 0-201-60443-4

Elemente conexe

Alte proiecte

linkuri externe

Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica