Featured Post

Helppo ja nopea kolmionpiirtorutiini.

Vau. Kehitys kehittynyt ja oppi opittu. public static void SolidTriangle(Point a, Point b, Point c, Color color) {             Point[] po...

Wednesday, July 19, 2006

RLE Dekoodaus, kun kerta tuli puheeksi...

Ensinnäkin, Wikipedia on hieno asia. Ainakin, mitä eri kompressioalgoritmeihin tulee.

Ahem.

Eli, meillä on RLE-enkoodattua dataa, missä useammin kuin yhdesti peräkkäin toistuvat merkit on merkattu merkki-merkki-numero, tai LLN, mitä kirjainyhdistelmää käytin oman koodini dokumentaatiossa jostain syystä. Tämän purkaminen on triviaali tehtävä, jos meillä on koko rimpsu kerralla yhdessä puskurissa. Mutta, jos käytössämme on esim. 100 merkin puskuri, niin muutama erikoistapaus tulee vastaan.

Lyhyesti: Meidän pitää varmistaa että LLN tapaukset puretaan aina oikein. Eli, on kolme erikoistapausta:
  1. Puskurin viimeinen kirjain on L
  2. Puskurin viimeiset kaksi kirjainta ovat LL
  3. Puskurissa on täysi LLN viimeisenä.
3. tapaus on helppo - vertaa toiseksi ja kolmanneksi viimeistä merkkiä, ja jos ne ovat samat, dekoodaa pois vaan!

2. tapauksessa meidän pitää tiputtaa dekoodattava pätkä 2 merkkiä lyhyemmäksi, sekä jälkikäteen siirtää LL puskurin alkuun, ja alkaa täyttämään puskuria kolmannesta merkistä.

1. tapauksessa - joka on siis yleisin tilanne, sekä identtinen normaalitapauksen kanssa, dekoodaamme merkin vähemmän, kopioimme viimeisen ensimmäiseksi puskuriin, ja alamme täyttämään puskuria toisesta merkistä alkaen.

Ei kovin vaikeaa loppujen lopuksi. Oma koodini on vielä sen verran rumaa ettei sitä kehtaa näyttää, mutta ehkäpä kohta, jahka aloitan DEFLATEn kanssa.

DEFLATE vaatiikin jo spesifisen tiedostomuodon käyttöä, sitten.

No comments:

Post a Comment