После удаления байтов заголовка и распаковки значений пикселей, файл PNG оставляет нам ряд строк (горизонтальная полоса изображения высотой в один пиксель).
Каждая строка начинается с одного байта, определяющего используемый фильтр, за которым следуют значения RGB:
+-----+-----+-----+-----+-----+-----+-----+
| 0:F | 1:R | 2:G | 3:B | 4:R | 5:G | 6:B | // end of first row in image
+-----+-----+-----+-----+-----+-----+-----+
| 7:F | 8:R | 9:G |10:B |11:R |12:G |13:B | // end of second row
+-----+-----+-----+-----+-----+-----+-----+
В изображении без байта фильтра я мог бы просто разделить индекс на 3 (так как есть три значения на пиксель RGB), затем используйте эти формулы, чтобы получить положение x / y этого пикселя:
x = index % width
y = index / width
Но байт фильтра меня отбрасывает! Как я могу получить x / y позицию пикселя, учитывая индекс байта красного пикселя? (Скажите в байте 4 или в байте 11, как показано выше.)
Я пробовал все виды перестановок, но я думаю, что должно быть элегантное решение!