Documente Academic
Documente Profesional
Documente Cultură
Ramacanu Andrei-Silviu
Cuprins............................................................................................................................................1
Introducere.......................................................................................................................................2
1. Descrierea formatelor fiierelor de imagine................................................................................4
1.1. Formatul DIB (Device Independent Bitmap)....................................................4
1.2. Formatul BMP................................................5
1.2.1 Citirea unei imagini BMP....................................................................6
1.2.2 Scrierea unei imagini BMP..................................................................6
1.3 Formatul PCX..................................................................................................6
1.3.1 Codificarea RLE (Run-Length Encoded)..............................................7
1.3.2 Antetul fiierului PCX.........................................................................7
1.3.3 Citirea unui fiier PCX........................................................................9
1.4 Formatul GIF..................................................................................................10
1.5 Formatul TIFF (Tagged Image Format File).....................................................12
Concluzii.........................................................................................................................................13
Bibliografie.................................................................................................................................14
Introducere
zgomotului etc;
-
Acesta nu este un format de fiier imagine, ci este formatul n care pot fi pstrate
imaginile n memorie de aplicatiile Windows. De obicei programele care doresc afiarea
diferitelor formate de fiiere imagine recurg la acest format ca i format intermediar.
DIB reprezint o harta de pixeli independent de dispozitiv. Structura blocului de memorie
care conine un DIB este descris n figura 2.3.
Header-ul de la nceputul formatului DIB conine informaii relevante necesare reconstruirii
imaginii:
Typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD
biPlanes;
WORD
biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
// Rezoluia pe orizontal
LONG biYPelsPerMeter;
// Rezoluia pe vertical
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
Paleta de culori este o colecie de intrri de tip RGBQUAD. Aceast structur este descris
mai jos:
rgbBlue;
// intensitate albastru
BYTE
rgbGreen;
// intensitate verde
BYTE
rgbRed;
// intensitate rosu
BYTE
rgbReserved;
// iniializat la 0
} RGBQUAD;
Tabloul de pixeli poate fi memorat necomprimat sau folosind o metod de compresie
de tip RLE (Run-Length Encoded) pe 4 sau pe 8 bii. Metoda de stocare a valorii pixelilor
este specificat de valoarea cmpului biCompression din headerul formatului. Amnunte
despre metoda de compresie RLE vor fi date la descrierea formatului PCX.
1.2 Formatul BMP
Un fiier imagine BMP este identic cu reprezezentarea n memorie a formatului DIB,
cu un antet adaugat la formatul DIB. Coninutul antetului este:
typedef struct tagBITMAPFILEHEADER {
WORD
bfType;
DWORD bfSize;
WORD
bfReserved1;
WORD
bfReserved2;
DWORD bfOffBits;
imaginii
} BITMAPFILEHEADER
Dup antetul fiierului urmeaz o structur BITMAPINFOHEADER, paleta de culori
(dac este folosit) i tabloul pixelilor din imagine (vezi formatul DIB).
1.2.1 Citirea unei imagini BMP
Citirea unei imagini BMP se face direct, deoarece formatul intern al datelor din
ierarhia de clase Image este formatul DIB, iar un fiier imagine BMP conine un antet urmat
de un DIB.
Paii necesari pentru citirea imaginii BMP sunt urmtorii:
1.
2.
stocat n fiier);
4.
5.
Afiarea imaginii se face prin apelul funciei membru specializate din clasa printe
Image.
1.2.2 Scrierea unei imagini BMP
Pentru a salva o imagine DIB ntr-un fiier BMP trebuie urmai paii descrii mai jos:
1.
Iniializarea
cmpurilor
din
antetul
fiierului
(structur
de
tip
BITMAPFILEHEADER);
2.
3.
2.
Dac cei doi bii mai semnificativi ai unui octet au valoarea 1, ceilali ase
bii mai puin semnificativi indic de cte ori trebuie repetat octetul care urmeaz.
2.1.
04 66 66 66 29 3F 3F A7 A7 A7 A7 A7
1.3.2 Antetul fiierului PCX
Antetul fiierului PCX este de forma:
struct PCXHeader
{
unsigned char manufacturer;
unsigned char version;
unsigned char encoding;
unsigned char bits_per_pixel_per_plane;
short
xmin;
short
ymin;
short
xmax;
short
ymax;
04 C3 66 29 C2 3F C5 A7
palette_info;
pentru un fiier PCX valid. Acest cmp este folosit pentru a verifica dac un fiier conine o
imagine n format PCX;
-
creat fiierul imagine. Dac bits_per_pixel_per_plane * nplanes este 8 i version este mai
mare dect 5, fiierul are o palet de culori cu 256 intrri (256x3=768 octei) adugat la
sfritul imaginii;
-
pixel n fiecare plan de bii. De exemplu, o imagine cu 256 culori va avea un singur plan de
bii cu 8 bii pentru fiecare pixel;
-
este (xmax xmin + 1), iar nlimea este (ymax ymin + 1);
-
intrri de cte un octet pentru fiecare component RGB. Aceast palet este valid dac
valoarea produsului bits_per_pixel_per_plane * nplanes este mai mic sau egal cu 4;
8
2.
3.
imaginea PCX s fie convertit din plane de bii n format compact de tip DIB. Pentru
aceasta trebuie combinai biii corespunztori unui pixel din fiecare plan de bii PCX pentru
a obine un format compact care s reprezinte valoarea pixelului n format DIB:
Creaz o masc pentru cei mai semnificativi bii_pe_pixel_pe_plan iniializai la
valoarea 1;
Repet (pentru toate liniile din imaginea PCX)
{
Repet (pentru toi octeii din fiecare plan)
{
Repet (de (8 / bii_pe_pixel_pe_plan) ori)
{
Repet (pentru toate planele)
{
mpacheteaz biii din fiecare plan ntr-un octet;
Dac sunt completai toi cei 8 bii, copiaz octetul n locaia adecvat din formatul
DIB;
}
9
struct GIFHeader
{
char signature[3];
char version[3];
}
2.
structura urmtoare:
Struct LogicalScreenDescriptor
{
unsigned shortwidth;
unsigned shortheight;
unsigned char flags;
unsigned char bgcolor;
unsigned char aspect_ratio;
10
}
Dac cel mai semnificativ bit al cmpului flags are valoarea 1, fiierul GIF include o
tabel de culori. Aceast tabel de culori este denumit tabel global de culori, deoarece se
aplic tuturor imaginilor coninute n fiierul GIF.
3.
4.
Unul dintre cele mai importante blocuri este blocul descriptor al imaginii care ncepe cu o
virgul (2CH) i conine informaii despre imaginea care urmeaz. Structura care reprezint
informaiile coninute ntr-un bloc descriptor de imagine este:
Struct ImageInfo
{
unsigned shortleft;
// Pozitia imaginii
unsigned shorttop;
// Mrimea imaginii
}
Dac cel mai semnificativ bit al cmpului flags are valoarea 1, urmeaz o tabel de
culori. Aceast tabel de culori este denumit tabel local de culori.
Dup tabela de culori local urmeaz un singur octet al crui valoare indic numrul
de bii necesar pentru a reprezenta valoarea curent a unui pixel din imagine. Acest octet
determin i dimensiunea iniial a codului folosit de algoritmul de compresie LZW.
Urmeaz apoi valorile pixelilor din imagine, stocate ntr-o secven de blocuri de cel
mult 255 octei n fiecare bloc. Aceste valori sunt stocate ntr-un format comprimat codificat
cu ajutorul algoritmului LZW cu coduri de lungime variabil.
11
5.
Dac fiierul GIF conine mai multe imagini, secvena bloc descriptor, blocuri
Bloc final care conine un singur octet cu valoarea 3BH i marcheaz sfritul
Concluzii
12
Bibliografie
13
14