Простым способом никак, нужно читать весь файл и считать кадры. А чтобы понимать, что это именно начало кадра, а не что-то другое, нужно читать посекционно. В анимированном гифе image descriptor после Graphic Control Extension (по одной на фрейм), вот их и нужно подсчитать. Алгоритм примерно такой:
- Читаем секцию Header
- Читаем секцию Logical Screen Descriptor. Из нее узнаем тип таблицы цветов: глобальная или локальная. Также узнаем размер таблицы.
- Если глобальная, рассчитываем длину секции Global Color Table и пропускаем.
- Затем, в анимированном gif будет секция Application Extension block (21 FF). Читаем.
- А дальше запускаем цикл чтения секций Graphic Control Extension (GCE, 21 F9). Каждой секции соответствует один фрейм.
- Читаем GCE
- Затем Image Descriptor
- После будет несколько секций кодов LZW, перед началом которых будет их длина. Зная длины, перепрыгиваем эти секции по одной. Оказываемся в начале следующего GCE.
Возможно проще воспользоваться сторонним решением :)