[python] Parsování PNG

Michal Molhanec mol-python na seznam.cz
Úterý Březen 20 20:49:10 CET 2012


Dne 20.3.2012 13:09, Jakub Vojáček napsal(a):
> Dobrý den,
> 
> pracuji na parseru PNG obrázků a narazil jsem na pár problémů s filtry. 
> Postouji podle návodu http://www.root.cz/clanky/radkove-filtry-v-png/ 
> a zasekl jsem se hned u prvního (sub) filtru. Nevím, jak mám reagovat to,
> když mi výsledek po odečtení podteče (například 128-255).

To moc nechápu. Pokud PNG parsuješ, tj. čteš, tak neodečítáš, ale naopak zpátky přičítáš.
Jinak je to ale klasická osmibitová bezznaménková aritmetika, tj. modulo 256, to máš IMHO správně.

> RGB nemůže mít záporné hodnoty, mám tedy na výsledek zavolat funkci abs? Podobný problém nastává,
> pokud výsledek přeteče (je vyšší než 255). Mám vše vyšší než 255 zaokrouhlovat na 255? Nebo mám
> použít modulo 256? Ani jedno z vyše uvedených mi myslím nefunguje správně, protože složky RGB by
> měly nabývat pouze hodnot 0, 128, 255 (jedná se o interpet jazkyka brainloller) a mně tam vznikají
> složky jako 1, 254, 127, ...

možná spíš od sebe odečítáš špatná čísla :-)

> Také bych měl dotaz na čtvrtý filtr (filtr s paeth prediktorem). Mají se tam porovnávat pixely, 
> ale jediný způsob, na který jsem přišel, jak porovnat pixely je sečíst všechny složky rgb (self.sum)
> a porovnávat je. Je to tak správně?

Nenech se zmást, všechny filtry pracují na úrovni odpovídajících si bajtů, nikoli celých pixelů (pokud
to náhodou není 8bitový čb nebo 8bitový s paletou, kdy bajt = pixel). Odpovídajícími míním, že se
např. odečítá bajt zelené složky od dalšího bajtu zelené složky ap.

-- 
Zdraví,
Michal Molhanec


Další informace o konferenci Python