Tömörítő, jaj nekem?
A feladat az, hogy egy két szinű kép tartalmát szeretném betömöríteni olyan módon, hogy a kép pixeleit sorról sorra megvizsgálom, és ha 4-nél több egyezést találok, akkor azt kiírom egy bájtba, az alábbiak szerint:
A bájt balról legelső bitje 1, ez jelzi, hogy tömörítvény.
A bájt balról második bitje 1 ha fekete és 0 ha fehér.
A bájt további hat bitje a pixelek száma (minusz 4). Ez maximum 67 lehet.
Ha az azonos szinű pixelek száma nem haladja meg a négyet, vagy ha nem azonosak a pixelek, akkor azokat tömörítés nélkül kell kiírni, az alábbi formában:
A bájt balról legelső bitje 0. Ez jelzi, hogy nem tömörített.
A bájt balról második és harmadik bitje számláló, ami azt jelzi, hogy hány bites szekvencia következik.
A bájt további öt bitje maga a szekvencia, aminek a tartalma a pixelek egymás utániságától függ. Ha a pixel fekete akkor egy 1-es, ha fehér akkor 0 lesz. például ilyen
0 11 10010
ez a bájt tartalmilag nem tömörített, négy darab pixelt tárol, amik egy fekete, két fehér és még egy fekete.
1 0 111110
ez a bájt meg tömörített, fehér pixeleket tömörít, azokból 66-ot. Mivel a 111110 az decimálisan 62 és a tömörítés az első négyet nem számolja. Ha 4 egyforma van csak, akkor azt tömörítetlenül írja le, ha van egy ötödik is, akkor azt egynek írja. Ezért 67 a maximum. A 67 egyforma tömörítve így nézne ki:
1 0 111111
vagy ha feketék a pixelek, akkor meg így:
1 1 111111
Ha 67-nél több egyforma van, akkor a 67-et kiírja egy bájtba és folytatja lenullázott számlálóval.
A balról első bit állapota: 1 ha tömörített, és 0 ha nem.
A balről második bit ha tömörített, akkor színbit (0 ha fehér, 1 ha fekete)
Ha nem tömörített akkor a második és a harmadik bit is számláló.
Ezt szeretném megvalósítani, freepascalban. Előre is köszönöm a konstruktív hozzászólásokat.
és megvaaan!
127 num
0 *
1 num
1 *
2 num
0 *
6 num
1 *
80 num
0 *
5 num
1 *
3 numlast
1 *last
woahh
127. bit: 0
1. bit: 1
2. bit: 0
6. bit: 1
80. bit: 0
5. bit: 1
3! bit 1 end
A megvalósítást nem fogom ide behányni, de elárulom azoknak, akik érdeklődnek a megoldás iránt, hogy hol szúrtam el.
Nagyon rá voltam állva az egymás után azonos bitekre, a gondolkodásmódban is és a kódban is. Ezzel is indult a program. Közben meg elfeledkeztem a másik, tömörítés nélküli ágról, ahol a bitek száma amúgy is erősen limitált, hiszen egy bájton belül kell legyen minden. A maximális bitszám 4 volt, de 7-re felbővítettem. Ezt érdemes vizgálni és csak akkor áttérni az azonosakra, ha a korábbi 4-et, vagy most már a 7-et meghaladják. Mert hiába jön egyforma szekvencia, ha a számuk csak hét vagy kevesebb, akkor is csak tömörítés nélkül lesz kiírva. Így már játszi könnyedséggel felépítettem a hibátlan logikát.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!