Я начал работать над библиотекой кодирования / декодирования PNG для целей обучения, поэтому я хочу реализовать каждую ее часть вручную.
Я довольно долго с этим справлялся, но теперь я немного застрял.Вот то, что я успешно реализовал:
- Я могу загрузить двоичный файл PNG и просмотреть его байты
- Я могу прочитать сигнатуру и блок IHDR для метаданных
- Я могу прочитать блоки IDAT и объединить данные изображения в буфер
- Я могу читать и интерпретировать заголовки zlib из вышеупомянутых данных изображения
И вот где язастрял.Я смутно знаю следующие шаги:
- Извлечение сжатых данных zlib в соответствии с их заголовками
- Выяснение используемых методов фильтрации и "отмена" их для получения необработанных данных
- Если все прошло правильно, теперь у меня есть необработанные данные RGB в виде
[<R of 1st pixel>, <G of 1st pixel>, <B of 1st pixel>, <R of 2nd pixel>, <G of 2nd pixel>, etc...]
Мои вопросы:
- Есть ли что-нибудь легкое?реализация для понимания (может быть, с примерами) или руководство по извлечению zlib, так как мне было трудно понять официальные спецификации
- Может ли быть несколько методов фильтрации, используемых в одном файле?Как это понять?Как определить «границы» этих по-разному отфильтрованных частей?
- Является ли мое понимание того, как будут выглядеть правильные окончательные данные?А как насчет альфа-канала или когда используется палитра?