Я работал над пользовательским GIF-декодером для проекта, над которым я работаю, и который требует как можно меньше данных GIF для хранения в ОЗУ (настолько эффективно, что я вытаскиваю все из файла по мере необходимостиэто, побайтово).
Я работал над следующим учебником:
http://matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp
с небольшой помощью самой спецификации:
https://www.w3.org/Graphics/GIF/spec-gif89a.txt
С моим декодером я могу сделать как анимированный GIF, так и анимированный светофор.Но когда я пытаюсь пройти через GIF, экспортированный с www.piskelapp.com (который использует gif.js в качестве экспортера), я получаю много отступов между различными блоками, отступы, где в некоторых случаях не должно быть в соответствии сСпецификация.
Например, следующая анимация https://www.piskelapp.com/p/agxzfnBpc2tlbC1hcHByEwsSBlBpc2tlbBiAgICA_eOjCgw/edit имеет начало, которое выглядит следующим образом:
47 49 46 38 39 61 20 00 20 00 F7 00 00 00 00 00 4E 4E 4E FF FF 00 00 00 00 00
Первые 6 байтов должны быть заголовком (GIF89a в ASCII)и следующие 7 должны быть дескриптором логического экрана (LSD).Учитывая приведенную здесь информацию, сразу же следует последовательность данных о цветах, соответствующих количеству цветов в ЛСД.Но это не так, это всего лишь 3 00, 3 "4E" и 2 "FF", за которыми следует строка 00, которая продолжается 760 байт.После этого 760 я прихожу к расширению графического управления (которое ожидается и обозначается 0x21).Это происходит между многими из следующих блоков, за исключением того, что я не вижу кодов расширения любого вида, где я ожидал бы, и при этом я не вижу дескрипторы изображения в правильных местах (которые должны начинаться с 2C).
Короче говоря, я что-то упускаю из спецификации?Что все это, как выглядит, отступы и как я могу это обойти?Я видел другие типы этого отступа в других файлах GIF, использующих другие кодировщики, и, похоже, нет единого кода, который я мог бы найти.Файл работает в Windows Photos, поэтому я должен что-то упустить.