Sadržaj poglavlja

U ovom poglavlju je dat pregled kratki pregled BMP i GIF formata slike. Navedene su njihove osobine i predstavljena osnovna struktura datoteka formiranih po ovim formatima.

BMP i GIF format slike

Pogledajmo BMP i GIF format slike, kao primjer kako se definiraju formati datoteka u kojima su pohranjeni podaci o slici.

BMP

BMP predstavlja jedan od najjednostavnijih formata slike. Windows BMP je nativni format slike u Microsoft Windows operativnim sistemia. On podržava slike sa 1, 4, 8, 16, 24 i 32 bita boje po pikselu, ali su BMP datoteke koje koriste 16 i 32 bita rijetko u upotrebi. Pored ovoga, BMP podržava i jednostavnu run-length kompresiju za slike sa 4 ili 8 bita po pikselu.

Struktura BMP datoteke je vrlo jednostavna i sastoji se od četiri dijela:

  • File Header – zaglavlje datoteke,
  • Image Header – zaglavlje slike,
  • Color Table – tabela boja,
  • Pixel Data – podaci o pikselima slike.

Na vrh

File Header

Svaka BMP datoteka započinje sa BITMAPFILEHEADER strukturom.

Osnovna funkcija ove strukture je da označi format datoteke. Da bi se utvrdilo da se radi o BMP datoteci, mogu se izvršiti tri provjere:

  • Prva dva bajta moraju sadržavati ASCII znakove “B” i “M”.
  • Ako koristimo datotečni sistem na kojem je moguće odrediti tačnu veličinu datoteke, ovu vrijednost uporediti sa vrijednosti polja bfSize.
  • Polja bfReserved1 i brReserved2 moraju imati vrijednost 0.

Zaglavlje datoteke određuje i lokaciju podataka o pikselima u datoteci. Pri dekodiranju BMP datoteke koristimo polje bfOffbits da bismo odredili pomak od početka datoteke do mjesta gdje počinju podaci o pikselima.

Na vrh

Image Header

Zaglavlje slike slijedi odmah nakon BITMAPFILEHEADER strukture i dolazi u dva različita formata, kao BITMAPINFOHEADER i BITMAPCOREHEADER strukture. BITMAPCOREHEADER predstavlja BMP format korišten u OS/2, a BITMAPINFOHEADER se koristi na Windows operativnim sistemima.

Na žalost, ne postoji polje koje označava verziju BMP datoteke, tako da je jedini način da se utvrdi o kojoj verziji se radi tako što se ispita polje koje označava veličinu strukture. Ovo polje je prvo polje u obje strukture i dužine je 4 bajta. Ukupna veličina BITMAPCOREHEADER strukture je 12 bajta, a veličina BITMAPINFOHEADER je 40 bajta. Zbog dužine strukture BMP datoteka sa BITMAPCOREHEADER ne koristi kompresiju.

Na vrh

Color Table (Palette)

Tabeja boja slijedi iza zaglavlja sllike i može biti u jednom od tri formata. Dva od njih se koriste da mapiraju podatke o pikselima u RGB vrijednosti boja kada je dubina boje 1, 4 ili 8 bita.

Na vrh

Pixel Data

Podaci o pikselima slijede iza palete boja ili bit maske ako su one prisutne. U suprotnom, prate BITMAPINFOHEADER ili BITMAPCOREHADER strukturu. Redovi piksela su u datoteci poredani od dna prema vrhu. Broj redova je dat sa biHeight ili bcHeight poljem u zaglavlju slike. Veličina reda se određuje na osnovu vrijednosti biBitCount (bcBitCount) i biWidth (bcWidth) polja, pri čemu se vrši zaokruživanje na umnožak od četiri.

Format podataka o pikselima zavisi od broja bita po pikselu:

  • 1 bit po pikselu – svaki bajt je podijeljen na 8 poljla čije vrijednosti predstavljaju indeks u paleti boja. Najvažnije bit polje je krajnji lijevi piksel.
  • 4 bita po pikselu – svaki bajt je podijeljen na dva polja od po četiri bita.
  • 8 bita po pikselu – svaki bajt predstavlja indeks boje u paleti boja.
  • 16 bita po pikselu – svaki piksel je predstavljen sa dvobajtnom cjelobrojnom vrijednosti- Ako je vrijednost biCompression polja u BITMAPINFOHEADER strukturi postavljena na BI_RGB (0), intenzitet svake boje je predstavljen sa 5 bita, a najvažniji bit se ne koristi. U slučaju da je ovo polje postavljeno, onda bit maske određuju koji biti se koriste za svaku od komponenti boje.
  • 24 bita po pikselu – svaki piksel je predstavljen sa tri bajta, koja određuj plavu, zelenu i crvenu komponentu boje respektivno.
  • 32 bita po pikselu – svaki piksel je predstavljen 32-bitnom cjelobrojnom vrijednosti. Ako je biCompression polje postavljeno na BI_RGB, tri niža bajta predstavljaju 8-bitne vrijednosti RGB komponenti, dok se najvažniji bit ne koristi. U protivnom tri 32-bitne bit maske koje prate BITMAPINFOHEADER strukturu specificiraju koje bite koristi svaka komponenta boje.

Na vrh

Kompresija (RLE8)

BMP format podržava run-length kodiranje, i to samo za slike sa dubinom boje od 4 (RLE4) ili 8 (RLE8) bita. Slike sa drugim dubinama se ne mogu komprimirati. BMP format se može komprimirati u dva načina rada, odnosno:

  • u apsolutnom načinu rada,
  • u RLE načinu rada.

Oba načina se mogupojaviti bilo gdje u bitmapi. RLE mod je jednostavan mehanizam RLE kompresije, gdje svaki prvi bajt sadrži broj ponavljanja, a drugi bajt boju piksela koji se ponavlja. Na primjer, sekvenca r80 se može proširiti na 00000000.

Ako je brojponavljanja nula, onda je drugi bajt poseban i njegova uloga može biti:

  • 0 kraj linije
  • 1 kraj datoteke
  • 2 delta – dva iduća bajta su horizontalni i vertikalni offset od trenutne pozicije do sljedećih piksela
  • 3-255 – prebacivanje u apsolutni način rada.

U apsolutnom načinu rada, drugi bajt sadrži broj bajtova za kopiranje. Svaki aplsolutni niz mora biti poravnat na riječ, što znači da se moraju dodavati bajtovi koji nisu uračunati u broj. Poslije apsolutnog načina rada, algoritam se vraća u RLE način rada.

Na vrh

GIF

Prvu verziju GIF (Graphic Interchange Format) formata je izdao CompuServe 1987. godine, pod nazivom GIF87a. Ova verzija je distribuirana besplatno, a format je ubrzo usvojen od strane aplikacija za obradu slike. CompuServe je nedugo nakon ove verzije objavio i drugu verziju GIF formata, kompatibilnu sa prethodnom. Ova verzija je poznata kao GIF89a.

Glavne osobine ovog formata su:

  • do 256 boja pomoću 1-8 bita po pikselu,
  • više slika u jednoj datoteci
  • koristi LZW kompresiju.

GIF je definiran u obliku blokova i podblokova, koji sadrže relevantne parametre i podatke koji se koriste za grafički prikaz. Struktura GIF datoteke je data na slici 7.

Extension Introducer
Extension Code
Extension Header
Data Block 1
Data Block 2
Data Block 3
...
Data Block n
Slika 7: Struktura GIF datoteke

GIF format koristi LZW kompresiju podataka o slici. Podaci su zapisani u blokovima koji su maksimalne dužine od 255 znakova. Prije postupka kompresije se rječnik inicijalizira brojevima od 0 do 255. Unosi u rječnik sa indeksima 256 i 257 su specijalne vrijednosti koje označavaju clear code i end code respektivno. clear code se koristi kako bi se izdala naredba da se rječnik isprazni, a end code se koristi da bi se označio kraj komprimiranih podataka. Za kodiranje podataka se može koristiti maksimalno 12 bita, što ograničava broj unosa u rječnik na 4096.

Na vrh