Я пытался понять это путем обратного инжиниринга файла .png, который я создал в GIMP.Это 4х4 пикселей.Моя цель состоит в том, чтобы декодировать необработанные пиксели из файла с намерением изменить это для кодирования.
Вот полный шестнадцатеричный дамп файла:
89504E47 0D0A1A0A 0000000D 49484452 00000004 00000004
08020000 00269309 29000000 3F494441 54081D01 3400CBFF
01CC96B1 134FE120 C0CECDF1 5101FFA5 60000000 000000E0
403201DF E59286DF 6D000000 00000004 EDB11F00 2E007A21
93EDB11F 3063136F 4733525A 00000000 49454E44 AE426082
Согласно spec , мы начинаем с подписи PNG, которая является первыми 8 байтами.
89504E47 0D0A1A0A
Затем мы имеем повторяющиеся структуры «чанков», этот файл содержит 3 «чанков», заголовок (IHDR), данные изображения (IDAT) изатем конец "кусок" (IEND).
Каждый фрагмент размещается в: первые 4 байта для длины данных фрагмента, следующие 4 байта для типа данных, затем n байтов для фактических данных и затем 4 байта для циклической избыточностипроверка (CRC) типа данных и фактических данных разделов.
После этого через ...
0000000D
Длина данных куска (13 байтов).
49484452
Тип чанка (IHDR).
00000004 00000004 08020000 00
Является ли данные чанка (ширина 4 байта, высота; глубина в 1 байт, тип цвета, метод сжатия, метод фильтра, метод чересстрочной развертки),
269309 29
Является ли CRC данных и типа (удалось получить код для обработки этого из здесь .
000000 3F
- длина данных следующего блока (63 байта).
494441 54
- этотип чанка (IDAT).
081D01 3400CBFF 01CC96B1 134FE120 C0CECDF1 5101FFA5 60000000 000000E0 403201DF E59286DF 6D000000 00000004 EDB11F00 2E007A21 9350 * 10 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10: * *.и отфильтрованы).
Итак, мой реальный вопрос: как мне декодировать этот последний раздел в необработанные пиксели?
Согласно spec , я должен сначала распаковать данные (INFLATE?), А затем отфильтровать его (??), чтобы оставить строки развертки пикселей (моя цель).
Если бы это можно было объяснить в псевдокоде, это было бы удивительно! В противном случае я знаком сБыстро и менее с C ...