[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