Задать вопрос
you_are_enot
@you_are_enot
Пограммист любитель

Как декодировать 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]
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
У вас глубина цвета 1 бит, так что байт 0 это на самом деле 8 битов со значением 0. Поскольку у вас ширина картинки 2, то имеют значения первые два бита (тоже 0), а остальные просто игнорируются.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы