Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » scoala » informatica » grafica design
Formatul grafic BMP

Formatul grafic BMP


Formatul grafic BMP

 De cand exista PC-urile, informatiile de imagine se salveaza in asa-numitele fisiere bitmap. Acestea pot fi recunoscute datorita extensiei .BMP. Faptul ca acest format, care ocupa mult spatiu de stocare, a supravietuit atata timp este pe undeva de inteles: in fisierele BMP sunt stocate informatiile aproape asa cum Windows reprezinta intern imaginile. Aici, informatia de culoare a fiecarui punct de imagine este stocata in 1, 4, 8, 16 sau 24 biti. Cu cat sunt rezervati mai multi biti de culoare pentru fiecare punct de imagine, cu atat este mai mare adancimea culorii si implicit calitatea imaginii. Acest format prezinta insa si un dezavantaj vizavi de celelalte: in masura in care este mai mare adancimea de culoare, creste si spatiul ocupat de fisier pe harddisk. Astfel se aduna rapid cativa MB, chiar si in cazul unor imagini color mici, la o rezolutie de 640x480 pixeli. De aceea, fisierele bitmap se comprima uneori cu RLE (Run Length Encoding), ceea ce transforma extensia din .BMP in .RLE - ansa nu orice program are filtru de import RLE.

Fiecare fisier BMP este compus din mai multe parti: un header, un tabel de culoare (optional) si datele pentru punctele de imagine. In header se afla, de exemplu, informatii despre cate puncte are inaltimea si latimea imaginii si unde sunt stocate in fisier informatiile de imagine. In tabelul de culoare este stabilit modul in care sunt reprezentate culorile pe paleta de culori a placii grafice. Acest lucru este important mai ales atunci cand imaginea este salvata cu 16 milioane de culori, insa placa grafica poate reprezenta numai 256 de culori. La o adancime de culoare de 16 si 24 de biti nu exista un tabel de culoare, deoarece in acest caz informatia de culoare este stocata direct in bitmap.



In concluzie, informatiile de imagine sunt stocate intr-un fisier BMP in moduri diferite. Utilizatorul nu trebuie sa-si bata capul cu aceste amanunte, deoarece filtrele de import ale tuturor programelor de prelucrare de imagini afiseaza corect informatiile de imagine.

Fisierele BMP pot fi transferate fara probleme intre calculatoare. Deoarece datele nu sunt comprimate, la reprezentarea pe monitor sau la imprimare nu are de suferit calitatea imaginii.

In ultimii ani formatul BMP a devenit un standard important ca urmare a faptului ca este utilizat atat sub OS/2 cat si sub Windows. Pentru multi dintre noi, acest format este destul de strain avand in vedere ca il cunoastem mai mult dupa nume si nu neaparat dupa structura. De fapt dupa cum e lesne de inteles, ne gasim in fata unui adevarat folclor - exista o serie de specificatii de formate grafice care utilizeaza acelasi nume. Sub sistemul de operare OS/2 ca dealtfel si sub Windows, fisierele de format BMP se folosesc pentru a stoca imagini, icon-uri, cursoare, pointeri si poate lista nu este completa. In continuare ne vom focaliza atentia asupra formatului BMP pentru imagine.

Exista doua versiuni ale formatului BMP sub Windows si doua sub OS/2. Putem sa le consideram ca fiind de fapt versiunea veche si versiunea noua pentru fiecare din cele doua platforme. Cele doua versiuni vechi sunt identice, lucru explicabil ca urmare a originii comune a lui OS/2 si Windows. Versiunile asa-zise noi ale formatului BMP sunt diferite. Aceasta inseamna ca o aplicatie care vrea sa lucreze in cazul oricarei instante valide de BMP trebuie sa ia in considerare trei variante diferite de format.

Din punct de vedere al programatorului, programul trebuie sa fie pregatit sa interpreteze corect oricare din cele trei versiuni de format BMP iar logica handler-ului de erori trebuie sa se ocupe de cel putin trei situatii distincte: un fisier imagine BMP valid, un fisier BMP valid dar care contine altceva decat o imagine, un fisier invalid de format nestiut.

Structura BMP

Formatul BMP este de uzanta generala astfel incat permite stocarea, intr-un fisier pe disc, a unei imagini de orice dimensiune. Informatiile despre culoare pot sa varieze de la 1 bit la 24 de biti. De asemenea este suportata codificarea RLE (run length encoding) sub Windows sau comprimarea folosind algoritmul Huffman sub OS/2. In ceea ce priveste modul de stocare, imaginea este inregistrata linie cu linie pornind de jos in sus. Acest lucru nu prezinta nici o problema atunci cand este necesara afisarea imaginii pe monitor folosind API-ul Windows sau OS/2 (Presentation Manager). Problema reala apare in cazul in care trebuie sa ne preocupam direct de datele stocate in fisier, respectiv atunci cand trebuie sa facem conversia de format sau trebuie sa listam imaginea respectiva la imprimanta.

In fiecare din cele trei variante specificate, un fisier BMP contine, respectand ordinea aparitiei, urmatoarele parti (am dat denumirile in engleza preluate din Microsoft Windows Programmer's Reference pentru a nu exista dubii in interpretarea lor): file header, bitmap info header, optional paleta de culori si in final datele imaginii. Variantele formatului BMP apar distincte in domeniile bitmap info header si in cel al paletei de culori.

Sub Windows 3.1, formatul vechi rezerva pentru paleta 3 octeti x numar culori de unde si denumirea sectiunii fisierului - RGBTRIPLE. In noua versiune avem 4 octeti rezervati pentru o culoare - RGBQUAD. Ambele versiuni, sub platforma Windows, includ structurile BITMAPFILEHEADER, BITMAPINFOHEADER, descrise in continuare.

Intrarile in tabela ce reprezinta paleta de culori, in cazul versiunii vechi, sunt constituite din trei octeti care indica componentele de rosu, verde si albastru. In cadrul versiunilor noi ale formatului BMP se adauga un al patrulea octet si ca urmare, o intrare in cadrul paletei de culori se poate citi ca si un longinteger. In cazul in care ne referim la liniile ce reprezinta imaginea, pe langa faptul ca ele sunt inregistrate incepand cu linia de jos, exista un al doilea aspect care priveste faptul ca aceste linii sunt umplute cu octeti pozitionati pe zero astfel incat sa ocupe un numar par de cuvinte duble. Dandu-se o imagine de latime w (in pixeli) si de adancime d, numarul octetilor de pe o linie este calculat folosind formula octeti/rand = ((w*d+31)/32)*4.


Componentele structurii BMP

In general vorbind, campurile nefolosite sau care nu sunt importante pot fi setate pe zero in toate situatiile. In cadrul enumerarii urmatoare am respectat denumirile campurilor asa cum apar ele in documentatia originala. In primul rand voi prezenta campurile structurii pe care am denumit-o BITMAPFILEHEADER:

bfType - este un camp folosit pentru validarea fisierului in ceea ce priveste faptul ca este o imagine BMP. Ocupa 2 octeti. Pentru un fisier BMP imagine acest camp contine totdeauna valoarea "BM' provenind de la prescuratarea "BitMap'. Windows nu suporta alte valori pentru acest camp pe cand OS/2 permite existenta a sase valori. Aceste sase valori indica practic ce informatii contine fisierul: icon color, icon mono, pointer mouse color si asa mai departe.

bfSize - indica marimea fisierului si are rezervat un spatiu de patru octeti. In cadrul unor instante mai vechi ale formatului BMP, acest camp indica valoarea zero respectiv atunci cand este setat poate indica lungimea fisierului in octeti sau in cuvinte (acest lucru depinde de programul care a scris informatiile in fisier). Astfel stand lucrurile, nu trebuie sa ne bazam niciodata pe valoarea indicata in acest camp. Interpretarea corecta ar fi lungimea fisierului in octeti.

bfReserved1, bfReserved2 - sunt doua campuri rezervate, ocupand fiecare cate doi octeti.

bfOffBits - indica offsetul, in octeti, de la inceputul fisierului la inceputul bitmap-ului. Valoarea stocata in acest camp este foarte importanta deoarece pe langa utilitatea evidentiata mai inainte apare si posibilitatea calculului numarului de intrari in cadrul paletei cu ajutorul formulei: numarculori = (OffBits - file_hdr_size - bitmap_hdr_size) / rgb_size.

In continuare am dat descrierea campurilor ce apar ca si componente ale structurii denumite BITMAPINFOHEADER:

biSize - ocupa patru octeti si indica marimea header-ului in octeti. Aceasta valoare mai este utilizata pentru a determina ce versiune de format avem in fata. Exista cateva valori consacrate in ceea ce priveste semnificatia lor. Astfel daca valoarea campului in discutie este 12 atunci avem de-a face cu versiunea de format mai veche (versiunile vechi sub Windows si OS/2 sunt identice). In cazul in care valoarea campului este 40 atunci inseamna ca este vorba despre noul format pentru Windows. Daca valoarea este 64 atunci este vorba despre noua versiune sub OS/2. Acum mai apare o problema in cazul in care avem o valoare cuprinsa in intervalul 12 - 64. De obicei putem spune ca avem de-a face cu o versiune noua de format BMP dar nu este o afirmatie adevarata in orice context. Multe aplicatii verifica daca valoarea in discutie este 40, in caz contrar apare un mesaj de eroare care ne spune ca fisierul nu este de tip BMP. Dupa cum se poate observa aceasta strategie de lucru nu este dintre cele mai corecte.

biWidth - ocupa patru octeti si reprezinta latimea imaginii in pixeli. Aceasta valoare nu reflecta si cazul in care este necesara "umplerea liniilor' pentru ca spatiul ocupat sa fie multiplu de 32.

biHeight - ocupa patru octeti si se refera la inaltimea imaginii in pixeli.

biplanes - ocupa doi octeti si indica numarul de plane de culoare din fisierul bitmap. Campul este setat de obicei pe 1.

biBitCount - ocupa doi octeti si reprezinta numarul de biti folositi pentru stocarea informatiei despre un pixel (se mai numeste si adancime). Valorile corecte pentru acest camp sunt 1, 4, 8 si 24.

biCompression - este o valoare, stocata pe patru octeti, ce indica tipul compresiei folosite in cadrul fisierului respectiv. Valoarea zero indica de fapt ca nu avem de-a face cu vreo compresie si pare sa fie cam singura valoare care apare aici.

biSizeImage - este marimea in octeti a bitmap-ului (ocupa patru octeti). Unele aplicatii se bazeaza pe o valoare corecta in acest camp.

biXPelsPerMeter - ocupa patru octeti si se refera la marimea pe orizontala a fisierului in pixeli pe metru.

biYPelsPerMeter - ocupa patru octeti si se refera la marimea fisierului pe verticala in pixeli pe metru.

biClrUsed - ocupa patru octeti si indica numarul de culori folosite.

biClrImportant - ocupa patru octeti si indica numarul culorilor importante folosite.

In cazul in care imaginile utilizeaza 4 sau 8 octeti pe pixel trebuie sa avem o paleta de culori. Numarul valid de culori cuprinse in aceasta paleta variaza dupa cum urmeaza: 16 si respectiv 256 dar pana la urma ele pot fi mai mici daca imaginea nu face uz de toate culorile posibile. In cazul in care se folosesc 24 de biti pe pixel avem de-a face cu o imagine full-color care nu mai necesita o paleta de culori.

Formatul PNG

Al patrulea si cel mai nou format de fisier care este destul de folosit pe Web este PNG ( Portable Network Graphic). PNG a fost dezvoltat sa depaseasca limitarile GIF-ului si ca un mijloc prin care dezvoltatorii de software grafic sa evite problemele de licentiere asociate altor formate. PNG a fost proiectat ca un standard deschis care sa ofere principalele facilitati ale GIF-ului, inclusiv streaming si progressive. De asemenea ofera o adancime de culoare mai mare, putand accepta imagini cu o adancime de culoare de pana la 24 de biti. In mai multe moduri, acesta este superior unui GIF - si de asemenea se descurca bine cu imaginile salvate in mod uzual in JPEG. Cu toate ca exista browsere care le accepta, oamenii nu sunt prea entuziasmati sa sprijine acest format.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.