STRUKTURA: header: b'\x89PNG\r\n\x1a\n' chunks: { 'length': b'\x00\x00\x00\r', 'type': b'IHDR', 'data': b'\x00\x00\x00\x03\x00\x00\x00\x03\x04\x03\x00\x00\x00', 'CRC': b'\xa4\x06\xa8\x8c', }, { 'length': b'\x00\x00\x00\x1b', 'type': b'PLTE', 'data': b'\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\x7f\x7f\x7f\x00\x00\x00\xff\xff\x00\xff\x00\xff\x00\xff\xff', 'CRC': b'\x9cx:m', }, { 'length': b'\x00\x00\x00\x1b', 'type': b'IDAT', 'data': b'x^\x05\x80\x81\x10\x00\x00\x0c\x02\x7f&\x83\x08$\x8b4B\xef\xb8G&\x1d\x04\x83\x01\x8d', 'CRC': b'\xfeh\xa0=', }, { 'length': b'\x00\x00\x00\x00', 'type': b'IEND', 'data': b'', 'CRC': b'\xaeB`\x82', } IHDR: { 'width': b'\x00\x00\x00\x03', 'height': b'\x00\x00\x00\x03', 'bit depth': 4, 'colour type': 3, 'compression method': 0, 'filter method': 0, 'interlace method': 0, } PLTE: b'\xff\x00\x00\x00\xff\x00\x00\x00\xff\xff\xff\xff\x7f\x7f\x7f\x00\x00\x00\xff\xff\x00\xff\x00\xff\x00\xff\xff' 0 - 255 0 0 1 - 0 255 0 2 - 0 0 255 3 - 255 255 255 4 - 127 127 127 5 - 0 0 0 6 - 255 255 0 7 - 255 0 255 8 - 0 255 255 IDAT: b'x^\x05\x80\x81\x10\x00\x00\x0c\x02\x7f&\x83\x08$\x8b4B\xef\xb8G&\x1d\x04\x83\x01\x8d' IDAT – rozkomprimovaný: b'\x00\x01 \x004P\x00g\x80' tj. 0 1 32 0 52 80 0 103 128 aneb (0, [ 1, 32]) (0, [ 52, 80]) (0, [103, 128]) Jenže bitová hloubka je 4, takže to tak také musíme rozdělit (filtr na začátku vynechávám): 0000 0001 , 0010 0000 0011 0100 , 0101 0000 0110 0111 , 1000 0000 Jelikož rozměry obrázku jsou 3x3, poslední sloupeček se nevyužije. IDAT – zafiltrované scanlines ve tvaru "(filtr, [(hodnoty jednotlivých pixelů), ])": [ (0, [0000, 0001, 0010]), (0, [0011, 0100, 0101]), (0, [0110, 0111, 1000]) ] IDAT – odfiltrované pixely (tady je to jednoduché, když je filtr 0 ^_^): [ [0000, 0001, 0010], [0011, 0100, 0101], [0110, 0111, 1000] ] A to už jsou přesně požadované indexy do palety, zde přepsané do dekadického tvaru: 0 1 2 3 4 5 6 7 8