Как декодировать png с битовой глубиной не равной 8?
Я изучаю алгоритмы декодирования png и столкнулся с трудностями при обработке изображений с битной глубиной не равной 8.
Изображение загружается в виде буфера (он же Uint8Array). IHDR и PLTE декодируются верно.
Картинка, которую я пытаюсь расшифровать, представляет из себя квадрат 2х2 цвета cian (RGBA: 0, 255, 255, 255)
Bit depth 1
Color type 3 (Indexed Color)
Palette [[0, 255, 255, 255]]
Количество каналов 1
После декомпрессии получился массив [0,0,0,0], где 1 и 3 элемент обозначают тип фильтра. В этом случае он равен 0 и после дефильтрации получается массив [0, 0]. Если соотнести его с палитрой, получается
[0, 255, 255, 255, 0, 255, 255, 255]
Хотя, на самом деле, должна получиться такая bitmap-а
[0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255]
У вас глубина цвета 1 бит, так что байт 0 это на самом деле 8 битов со значением 0. Поскольку у вас ширина картинки 2, то имеют значения первые два бита (тоже 0), а остальные просто игнорируются.