Как заголовки zlib хранятся в нескольких фрагментах IDAT в png

Я изучаю, как работает png, и пытаюсь создать простой декодер PNG с «чистым» С++.

Моя проблема в том, что я не знаю, как заголовки zlib хранятся в нескольких блоках IDAT-PNG. Первый фрагмент IDAT выглядит нормально — обычные «CM» и «CINFO», но когда я читаю следующий фрагмент IDAT, заголовок zlib выглядит странно, «CM» может быть случайным числом, а не 8 по умолчанию, а «CINFO» может быть выше 7 - я читал, что "CINFO" с номером выше 7 помечен как поврежденный/неприемлемый. Итак, где я могу найти информацию об этом? - Я не нашел в Интернете ничего об обработке нескольких фрагментов IDAT. (Э-э, я нашел кое-что здесь - в «StackOverFlow», но, похоже, он не описывает, как заголовки zlib хранятся в нескольких фрагментах IDAT, поэтому он не отвечает на мой вопрос)

Я прочитал RFC 1950 о zlib. https://tools.ietf.org/html/rfc1950


person Community    schedule 15.06.2018    source источник


Ответы (1)


В первом фрагменте есть только один заголовок zlib. Серия фрагментов IDAT представляет собой один поток zlib, разбитый на части.

Вам нужно более внимательно прочитать спецификацию PNG.

person Mark Adler    schedule 16.06.2018
comment
Спасибо! Это то, что я ожидал, но я не знал, так ли работает IDAT. Нужно еще раз прочитать спецификацию PNG. ;) - person ; 17.06.2018