PPPPP CCCC X X P P C C X X P P C X X PPPPP C X P C X X P C C X X P CCCC X X PCX FORMÁT PCX je sice jeden z nejrozšířenějších grafických formátů, ale když jsem o něm sháněl, informace tak jich moc nebylo, a proto se s vámi chci podělit o své zkušenosti. Jako většina formátu má na svém začátku hlavičku. U PCXka je 128bytová, ale je využito jen 74 bytů (autoři ji chtěli asi rozšířit). Byte | Velikost | Popis/poznámky -----+-----------+------------------------------------------- 0 | 1 | Konstantně 10 = ZSoft.pcx 1 | 1 | Informace o versi | | 0 = Verse 2.5 PC Paintbrush | | 2 = Verse 2.8 | | 3 = Verse 2.8 | | 4 = Verse 3.0 PC Paintbrush | | pro Wokna | | 5 = Verse 3.0 | | (nejrozšířenější) 2 | 1 | 1 = .PCX 3 | 1 | počet Bytů na pixel | | (1, 2, 4, nebo 80 4 | 8 | Rozměry: XMin,YMin,XMax,YMax 12 | 2 | Horizontální rozlišení v DPI 14 | 2 | Vertikální rozlišení v DPI 16 | 48 | Paleta (jen pro méně než 16 | | barev) 64 | 1 | Reservováno 65 | 1 | Počet plánů barev(u obrazů s více než 256 barvami) 66 | 2 | Bytů na řádek 68 | 2 | Jak se má paleta interpretovat | | 1 = Barevně | | 2 = Odstíny šedi 70 | 2 | Horizontální velikost obrazu v bodech 72 | 2 | Vertikální velikost obrazu v bodech 74 | 54 | Vyplňuje na 128 Bytů DPI = dots per inch (bodů na palec) Ale na obrázku jsou nejdůležitější obrazová data. V PCX jsou komprimována tak, že když jsou horní dva bity = 1 tak ostatních 6 bitů určuje kolikrát bude použit další byte. Máte-li na obrázku velké úseky stejné barvy, je tato komprese účinná. Problémy nastanou pro barvy s číslem větším než 192, ty potom totiž zabírají dvakrát více místa. Takhle nějak může vypadat rutinka na přečtení barvy ch=readz(f); //čte znak cou=1; //nastavuje počet opakování na 1 if (0xC0==(0xC0 & ch)){ //testuje horní dva bity 0xC0 = 11000000 cou=0x3F & ch; //kopíruje dolních 6 bitů do cou ch=readz(f); //načítá další znak do informace o barvě } Vysvětlivky : cou - počet opakování ch - informace o barvě readz - čte znak & - bitový AND Další důležitou částí je paleta. Pro obrázky s více než 16 barvami je uložena na konci souboru, a to 3*PocBarev od konce souboru (nejčastěji 256*3=678). Je-li paleta 16. barevná je uložena v hlavičce souboru A to jest vše. Přikládám zde program, který načte 256 barevný obrázek (do 320*200 bodů) a zobrazí jej. (Omlouvám se za některé prasárny, ale lepší už to asi nebude) Upozornění k programu: a) psal jsem ho já, takže není jistý, jestli bude fungovat b) nebyl důkladně testován takže viz. a) c) funguje jen pro 256barevný soubor d) v Borland C++ 3.0 lze určitě zkompilovat e) je v C++ protože Pascal už neumim f) máte-li dotazy či poznámky, posílejte je do redakce na známou adresu. HIPP (informace přejaty z "ZSoft PCX File Format Technical Reference Manual) (omlouvám se za krátkost článku, ale PCXko je opravdu jednoduchý) výheň