Как стать автором
Обновить

Комментарии 9

Как-то нужно было портировать код по получению размера изображения с Perl на С++. Секции для JPG и PNG были маленькие и легко портировались. Под GIF же было около 5 условий — и все они обрабатывались по-разному. Не подскажете, почему такая несправедливость? Судя по статье всё должно было быть намного проще…
Реальный размер изображения находится в секции Image Descriptor (2C), расположение которого еще нужно найти, пропустив доп. секции. Возможно поэтому.
Потому что в PNG в секциях есть данные об их размерах и что где лежит, а в GIF секции, так сказать, «плавающие» — получить доступ к данным можно только прочитав все секции до картинки по очереди.
Картинка уж очень похожа на инвайт на хабр.
На Ассемблере есть библиотека для декодирования GIF

;LOADGIF.ASM v1.0 — Optimized GIF Loader for EGA and VGA Video Modes
;By Rich Geldreich, Jr.
;Last Modified August 20, 1993
;Assembled with TASM v2.0

Помню, в 1999 году написал на основе этой библиотеки программу для DOS для просмотра анимированных GIF и даже для работы с ними — создание, распаковки и т.п. (-: вот было время то!

Сейчас на javascript уже делают распаковщики mp3.


hallo:
 db 'PLAYGIF { ..имя [имяXXXX[.расширение] | @файл_список] } [ключик][Y|N]',13,10
 db 'где: имя - GIF-картинка,может быть полный путь',13,10
 db ' имяXXXX - специальный формат файла с цифрами (girl0,vgf90,lk1000,35)',13,10
 db 9,'   Учитываются последние цифры.Первые нули нельзя',13,10
 db '   @файл - файл,в котором содержатся имена,разделенные Space,Enter,Tab',13,10
 db ' ключики - задают команды,что делать:',13,10
 db '      /E - разделить анимированный GIF на несколько: ИМЯ.gif имяXXXX',13,10
 db 9,'   при этом XXXX задает первый файл,затем будет автоувеличение',13,10
 db 9,'   на единицу',13,10
 db 9,'   /E@, /E@F - еще сделать файл список <ИМЯ.sld>',13,10
 db '      /C - сделать анимированный GIF: имяXXXX имяXXXX; имя.gif @список;',13,10
 db 9,'   имя.gif имяXXXX1-имяXXXX2 -> в первом случае объединит',13,10
 db 9,'   начиная с 1 и по 2 и получится имя.gif; будет брать имена',13,10
 db 9,'   из списка и получится имя.gif; В 3 случае все ясно и так',13,10
 db '      /B - показывает информацию о анимированном GIF: имя.gif',13,10
 db '      /@ - сделать файл_список из всех GIF в текущем каталоге: имя',13,10
 db 9,'   /@F - полный путь в именах',13,10
 db 'Ключи могут быть и в конце,и в начале.[Y|N] - перезапись разрешена,запрещена',13,10
 db 'Пример: farsy.gif a0.gif /e; new.gif g1-g10 /c; beleave.gif w0 /ey; l /@',36
Продолжение о формате PNG последует?
Ага, он следующий на очереди. Постараюсь не тянуть :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации