|
[Grafika]
[WebTip]
[Fotografování]
[Galerie]
[MujMac]
[Printing]
|
|||||||||
|
|
||||||||||
|
|
|||||||||
|
Dnes malinko odbočíme od tématu grafické komprese a povíme si něco, co jsem tak trochu načal v předchozím článku, a co se nám může někdy v budoucnu hodit. V minulém článku jsme si ukázali možnosti doplňkové komprese některých koeficientů DCT -matice, menších jak 7 bitů (číslo v desítkové soustavě menší jak 127) pomocí zápisu do sedmibitoveho formátu. Samozřejmě tento způsob je jen nejjednodušší možností, taky je možný ukládat 6 bitová nebo 9 bitová čísla stačí mít na paměti kolik bitů jsme použili pro ten který koeficient čili mít standard. Jedná se o zcela jednoduchý úkon, který je možné udělat mnoha způsoby, třeba přímým přístupem k jednotlivým bitům, ale taky jednoduchým matematickým přepočtem jenž si ukážeme. Využít tohoto triku můžeme nejen při kompresi malých čísel, ale taky při dekódování potažmo enkódování dat(SMS) z a do formátu PDU, jenž se se používá v mobilních telefonech. Nejdříve koeficienty (dále jen čísla) převedeme do dvojkové - binární soustavy a uložíme do pole nebo do řetězce. Standardní zápis 8 bitů vypadá v dvojkovém formátu nasledovně: číslo 6 = 0x18 + 0x17 + ... + 1x22 + 1x21 + 0x20.
Takhle z osmi vstupních čísel získáme sedm, což představuje účinnost komprese přibližně 88%. Chtěl bych zde upozornit, že toto je jen taková doplňková komprese. Všeobecně se používaji víc VLC nebo Huffmanovo kódovaní (pro zajímavost je z roku přibl. 1955), kde se nahrazují nejčastěji se vyskytujíci čísla nejmenšími znaky. Teď jak na to prakticky:
Následujíci funkce ze zadaného 56 prvkového pole bitů vrací pole 7 nebo 8 čísel podle hodnoty outputsize a taky podle něho dělí vstupní pole na 7 nebo 8 prvkové části.
Na to abychom kompresi ovšem taky udělali na disku je potřeba získaná čísla zapisovat do souboru v binárním formátu. Co to je binární formát? Data se obvykle ukládají do paměti ve dvouch formátech textovém a binárním. V textovém se vše ukládá jako text (překvápko že? :-) to jest také čísla. Např. číslo 125 se uloží jako znak "1", znak "2" a znak "5". V binární podobě se uloží jako sekvence bitů 01111101. I když to tak nevypadá ale binární způsob přístupu k datům má také své nevýhody, ale o nich teď mluvit nebudeme. Je ale jasné, že binární způsob zabírá většinou méně místa, je přesnější protože ukládá přesnou vnitřní reprezentaci hodnoty čísel a všeobecně ukladání dat může být rychlejší protože nedochází ke konverzím čísel na znaky. Tak víme co je binární formát a teď jak s ním pracovat. Úplně stejně jak s textovým až na pár vyjímek. První je, že musíme procesoru říct že chceme číst byty a ne znaky to jest otevřeme soubor v binárním formátu a druhá je že musíme uvést kolik bytů ukládáme :
Následujíci funkci berte jenom jako pomůcku, načítá obsah souboru do pole 7 bytů (tedy proměnných char) ..
Tak celý zdroják najdete tady(1,2kB) a taky je k dispozici zdroják pro Delphi(4,8kB). Dodatek: Jestli máte rádi hádanky tady je 7 čísel jenž reprezentují 8 bytových čísel. Každé z osmi čísel pak odpovída znaku v ASCII sadě. Když tedy zjistíte, která čísla to jsou dozvíte se odkaz jenž nesou. :-) [125, 54, 13, 74, 82, 108, 60] Zdroje: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||