DETAILNÍ POPIS FORMÁTU BMP, TIFF, PCX BMP Bitmapové soubory Windows jsou uložené ve formátě, který je nezávislý na zařízení (DIP) a tím umožňuje Windows zobrazit tyto soubory na jakémkoliv zobrazovacím zařízení. Implicidní přípona Windows pro tento formát je *.BMP. Každý BMP soubor obsahuje hlavičku BMP souboru a informační
hlavičku, tabulku barev a pole bitů, které určují údaje bitmapy. Soubor má
následující formu: BMP souborová hlavička obsahuje informace o typu, velikosti a
úpravě tohoto od zařízení nezávislého souboru. Hlavička je definovaná jako
BMP_FILE_HEADER (struktura):
BMP info hlavička, definovaná jako BITMAPINFOHEADER struktura
specifikuje rozměry, typ komprimace a barevný formát bitmapy.
Tabulka barev, definovaná jako pole RGB_QUAD struktur, obsahuje tolik položek, kolik je barev v bitmapě. Tabulka barev se nachází v 24 bitmapovém formátě, protože je tu každý pixel reprezentovaný 24 bitmi RGB hodnot v aktuální udajové oblasti. Barvy v tabulce by se měli objevit v pořadí jejich důležitosti. toto pomáhá ovladači displeje preddefinovat bitmapu na zařízení, které nemůže zobrazit tolik barev kolik je jich v bitmapě. Jestliže DIP je ve Windows verzi 3.0 a vyšší, ovladač může použít biClrImportant člen (tj. člen barevné priority) z BITMAPINFOHEADER struktury na určení, které barvy jsou prioritní. BITMAPINFO struktura může být použitá na reprezentaci konbinovanou z BMP info hlavičky a tabulky barev. Byty bitmapy nasledující bezprostředně za tabulkou barev, vytvářených z pole bytových hodnot reprezentujících po sobě jdoucí řadý, nebo "scan řádky" bitmapy. Každý "scan řádek " je tvořen z po sobě jdoucích bytech, reprezentujících pixely v "scan řádku", v pořadí zleva doprava. Počet bytů reprezentujících "scan řádek" závisí na barevném formátu a šířce bitmapy v pixelech. ("scan řádek" musí být zarovnaný nulami na konec 32 bitového okraje.) Ale segmentové okraje se mohou objevit kdekoliv v bitmapě. "Scan řádky " se vbitmapě ukládají zdola nahoru. To znamená, že první byte v oli reprezentuje pixely v levém dolním rohubitmapy a poslední byte reprezentuje pixely v pravém horním rohu. Člen biBitCount BITMAPINFOHEADER struktury určuje počet bitů,
které definují každý pixel a maximální počet barev v bitmapě. tyto členy mohou mít
následující hodnoty:
"biClrUsed" člen BITMAPINFOHEADER struktury specifikuje počet indexů barev v aktuální tabulce barev. Když "biClrUsed" člen je nastavený na nulu, bitmapa používá maximální počet barev odpovídající hodnotě "biBitCount" členu. Alternativní forma bitmapového souboru používá BITMAPCOREINFO, BITMAPCOREHEADER, a RGBTRIPLE struktury.
TIF Grafický formát TIFF ( Tag Image File Format ) vznikl ve spolupráci firem Aldus a Microsoft. Oblast jeho hlavního použití je typografie - DTP (desk-top publishing).Stejně jako formát GIF se i tento formát implementuje kromě počítačů PC IBM i na počítačích Mackintosh, pracovních stanicích s operačním systémem UNIX a na velkých počítačích, např. typu VAX. Pro grafický formát TIFF je charakteristická velká pružnost reprezentace údajů, co má ale v některých případech nežádoucí důsletky v tom, že v případě zpracování souboru na jiném počítači vznikají problémy (počítač hlásí chybové zprávy, např. "Neznámý formát údajů" a podobně). Soubory v grafickém formátě TIFF jsou generovány různými kreslícími programami, scannerami, kamerami pro počítačové videní a dalšími podobnými zařízeními. Údajový soubor má v podstatě tři části:
Soubor v grafickém formátě TIFF popisuje určitý logický obrázek, který se obyčejně můlže skládat z několika stránek nebo může být reprezentovaný v různých rozlišeních. Každá ze stránek nebo každé rozlišení vytváří určitou jednotku vevnitř souboru.Soubor může obsahovat libovolné množství těchto jednotek, ale obyčejně je v souboru jen jedna obrazová stránka v jednom rozlišení. Hlavička souboru má osm bytů. První dva byty udávají pořadí, ve kterém budou slabiky vytvářející soubor spracované. Když tyto dva byty obsahují dvojici znaků 'II', je to verze určená pro procesory Intel 80x86, co znamená, že méně významný je první byte slova. Když v první dvojici znaků je uložená dvojice znaků 'MM', jsou údaje určené pro počítače s procesorem Motorola 680x0 (významnější je první byte slova). Programová konverze údajů z jednoho tvaru na druhý není problematická. Další slovo (dva byty) by měli obsahovat číslo verze, obvykle obsahuje číslo 42 (2Ah). Již na tento údaj se vstahuje informace o pořadí bytů z předcházejícího slova - slovo má buď tvar 2A00h nebo 002Ah. Poslední čtyři byty hlavičky obsahují odkaz na první blok řídících proměných (directory), nesoucích informace o způsobě interpretace údajů. Odkaz je ve formě posunutí (offset) vzhledem na začátek celého souboru. Blokřídících proměných má tři části. První dvojice bytů obsahuje informaci o celkovém počtu hodnot v bloku. Následují vlastní položky - každá 12 bytů dlouhá. Na konci bloku řídících proměnývh je odkaz dlouhý čtyři byty na blok řídících proměnných. Když je odkaz nulový, další blok v souboru už neexistuje. Každá položka s délkou 12 bytů obsahuje několik částí
(polí). První pole dlouhé dva byty určují typ položky - např. hodnota 256 se
vstahuje k údaji o šířce obrázku. Položky jsou v blocích řídících proměných
uspořádané vzestupně právě podle údaje v prvních dvou bytech. Další pole má
stejnou délku dva byty a určuje jakého typu jsou následující údaje. Formát TIFF
rozeznává pět různých údajových typů:
Třetí pole obsahuje informace o počtě údajů daného typu, které tvoří vlastní informace, kterých význam je daný prvním polem položky. Když je např. údajový typ typu LONG (dva byty) a počet údajů je 20, potom dané položce patří 40 bytů vlastních údajů. Poslední pole v položce obsahuje vlastní údaje. Toto pole má vždy délku čtyři byty. Když je objem údajů menší jak čtyři byty, jsou údaje umístěné sem. V opačném případě je v těchto čtyřech bytech odkaz do rozšiřujícího bloku, kde jsou uložené vlaství údaje. Obrazové údaje jsou uložené ve formě bloků, které se nazývají pásy - strips. Údaj o jejich velikosti a umístění v souboru (offset) je uložený v bloku řídících proměných. Velikost pásů je volitelná a pohbuje se od jednoho řádku až po celý obrázek. Obvyklý objem údajů uložený v páse se pohybuje okolo 8kB. Stejně jako v případě jiných grafických formátů je možné komprimovat obrazové údaje. Je možné volit několik různých metod pro zakódování údajů: Huffmanovo kódování,a další metody. V některých implementacích ale nejsou k dispozici všechny předepsané metody, a tak se často nedoporučuje obrazové údaje komprimovat. Vzhledem k poměrně veliké volnosti při používání formátu TIFF rozhodli se jeho tvůrci vytvořit čtyři základní třídy (TIFF-Classes), které by údávaly určité hravice při používání formátu TIFF. Když patří zakódovaný obrázek do určité třídy, musí mít určité položky předepsané hodnoty. Tyto třídy jsou čtyři a určují "barevnost" obrázku: černobílý, odstíny šedé, barevný pomocí palety, barevný pomocí složek RGB. Obrazové údaje jsou uložené bez komrimace v černobílém
provedení. Informace o této skutečnosti jsou uložené v úplném bloku řídících
proměných. První řídící proměná (NewSubfile Type) určuje charakteristiku souboru
v tomto smyslu: je-li to jedno nebo vícestránkový obrázek, údaje o tom, jestli je to
obrázek s omezenou rozlišitelností atd.
Operační kód je vyjádřený v hexadecimálním tvaru:
Další operační kódy jsou informační:
PCX Grafický formát PCX vyvinula firma ZSoft. Má 128b velkou hlavičku, za kterou následují zkomprimovaná obrazová data a případně ještě paleta.
Za touto úvodní hlavičkou následuje vlastní grafické informace snad vždy v komprimovaném tvaru. Vzhledem k tomu, že formát pochází z doby, kdy neexistovaly grafické adaptéry, které by zobrazili více jak 16 barev je v úvodním bloku vyhrazeno 16*3 bajtů pro definování právě 16 barev. V této tabulce (ColorMap) je každá ze 16 barev definována třemi složkami R, G, B (proto tedy 16*3 bajtů). Verze ===== 0 PC Paintbrush 2.5 dovoluje uchovávat obrazy odpovídající schopnostem CGA bez mapy barev. 2 PC Paintbrush 2.8 uchovává obrazy s až 16ti barvami. 3 totéž jako verze 2, ale bez uchovávání mapy barev. 4 PC Paintbrush pro Windows shodná s verzí 5. 5 PC Paintbrush 3.0+. přidána paleta pro 256 barev a schopnost uchovávat obrazy v TrueColor.
16 barevný PCX 16 barevné obrázky PCX mohou být uloženy buď jako 4 bitové roviny (kde každá obsahuje jeden bit na pixel), nebo jako jeden obraz složený s použitím 4 bitů na pixel. V prvním případě je ColorPlanes=4, BitsPerPixel=1 a roviny jsou ukládány prokládáně (1. řádek 1. bitové roviny, 1. řádek 2. bitové roviny, ...). V druhém případě je ColorPlanes=1, BitsPerPixel=4 a jeden byte tedy nese informaci o dvou pixlech.
256 barevný PCX V hlavičce souboru musí být nastaveny tyto hodnoty : BitsPerPixel=8, ColorPlanes=1. Protože se původně nepočítalo s větším počtem barev než s 16-ti je paleta 256 barev přidána na konec souboru. Jedná se tedy o 256*3=768 bajtů (vždy R, G, B složka pro každou barvu) před touto paletou by se měl ještě nacházet bajt s hodnotou 0Ch a paleta pak tedy zabírá 769 bajtů na konci souboru. Paleta (ColorMap) v hlavičce obsahuje neplatné barvy.
True color PCX True color PCX obrázky jsou uloženy ve třech 8 bitových obrazových rovinách pro jednotlivé barevné složky R, G, B. Protože True color PCXy obsahují v komprimovaném poly obrazových údajů přimo hodnoty R, G, B složek neobsahují paletu a paleta (ColorMap) v hlavičce obsahuje neplatné barvy.
Run Lenght Encoding Jednotlivé pixely se při dekomprimaci (komprimaci) zapisují (čtou) na obrazovku z levého horního rohu po řádcích až do pravého spodního. Metoda RLE spočívá v zhuštěném zápisu opakujících se bajtů se stejnou hodnotou. Pokud je nalezeno až 63 po sobě jdoucích stejný bajtů jsou při komprimaci zapsány jako dva, kde první určuje počet opakování a má nejvyšší dva bity nastaveny na jedničku proto tedy max. 63 po sobě jdoucích stejný bajtů a druhý bajt udává právě hodnotu opakujících se bajtů. Pokud se vyskytuje jen jeden bajt dané hodnoty je opsán na výstup beze změny, ovšem jen pokud nemá nastaveny nejvyšší dva bity. To by se nám potom při dekomprimaci pletlo. Proto je na výstup zapsán jako hodnota C1h a potom vlastní hodnota bajtu, aby bylo možno jednoznačně rozlišit jednotlivé bajty a komprimované sekvence.
Algoritmus pro dekomprimaci vypadá tedy takto : Var F : File of Byte;
Z, J, CKL : Byte;
BEGIN
.
.
.
reset(F);
seek(F,128);
while NOT (Filepos(F)=(Filesize(F)-769)) do
begin
read(F,Z);
if (Z and $C0) = $C0 then begin
J:=Z and $3F;
read(F,Z);
for CKL:=1 to J do write(FO,char(Z));
end
else write(FO,char(Z));
end;
.
.
.
END.
|