Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2012, 18:13   #1
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
Вопрос Необходимо точное описание PNG

Здравствуйте.
Возникла задача считывать ручками, без каких либо библиотек отличных от стандартных в Си, читать PNG файл и переконвертить его в BMP.
Итак, BMP понимать научились очень быстро, а вот с PNG возникли проблемы, как минимум на стадии считывания информации, куда уж там до расшифровки.

В спецификации, а также вот здесь сказано, что первые 8 байт - это сигнатура содержащая HEX значения:
89 59 4E 47 0D 0A 1A 0A
Открываю файл HEX-редактором и смотрю:



Всё вроде бы пока верно. Далее, в тех же источника сказано, что СРАЗУ же после сигнатуры идет заголовок IHDR, размером 13 байт. Что мы видим в HEX-е:




Красным отмечено 4 "откуда ни возьмись" взявшихся байта, о которых в спецификации, да и вообще нигде ни слова не сказано, собственно, как и самих четырех буквах IHDR, которые отмечены мною синим цветом.
Собственно это был вопрос номер Раз.

Идем дальше, т.к. считываем 13 байт за заголовком IHDR:




Тут всё верно и согласно спецификаци. НО! Дальше указано, что идет или заголовок PLTE, тобишь палитра, или какие-то необязательные левые заголовки, или заголовок IDAT. Опять же подчеркну, что они идет СРАЗУ после IHDR.
Заглянём внутрь:




Откуда вылезли эти лишних 8 байт после заголовка? Что они значат? Спецификация, собственно, как и любые другие сайты молчат как партизаны, или я просто плохо ищу.

Собственно подобная байда на протяжении всего файла, вот я и хочу поинтересоваться, как именно устроен PNG файл, а также неплохо бы примеры кода его читающего, если есть где.

P.S.
Если кто знает, где есть реализация алгоритма Deflate для PNG изображений, буду очень признателен.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 23.10.2012, 20:33   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,342
По умолчанию

Читайте спецификацию!
Там четко написано, что сначала идет *размер* блока, потом имя (IHDR)

Ref: http://en.wikipedia.org/wiki/Portable_Network_Graphics
waleri вне форума Ответить с цитированием
Старый 23.10.2012, 21:01   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Смотрим раздел 5.3 спецификации, например.

А все нужные примеры кода есть в libpng, собственно.
Son Of Pain вне форума Ответить с цитированием
Старый 23.10.2012, 21:02   #4
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Там четко написано, что сначала идет *размер* блока, потом имя (IHDR)
Спасибо. Пускай это справедливо для блока IHDR.
А что делать с байтами после него?
66 A7 06 6C 00 00 00 01 HEX = 7396887973905563649 DEC.
Это уж точно не размер следующего блока.


Цитата:
Смотрим раздел 5.3 спецификации, например.
Вот это полезней. Что-то проглядел. Спасибо большое. Просто спецификацию еще не всю осилил, с забугорским пока не настолько дружен...
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 23.10.2012 в 21:05.
MooNDeaR вне форума Ответить с цитированием
Старый 23.10.2012, 23:03   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,331
По умолчанию

Цитата:
Спасибо. Пускай это справедливо для блока IHDR.
А что делать с байтами после него?
66 A7 06 6C 00 00 00 01 HEX = 7396887973905563649 DEC.
Это уж точно не размер следующего блока.
Если прочитать информацию по приведенной выше ссылке, то там прямо сказано, что за заголовком идут блоки, структура которых:
4-байта (длинна) - 4-байта (тип блока) - <данные> - 4-байта (CRT)
Как понимаю, размер фрагмента <данные> может быть различным ...
Там же есть и ссылки на типы блоков, а так-же на литературу.
Замечательная ссылка ...


Как это интересно ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Описание лабораторной работы. Помиогите сделать описание проги .какая формула что делает. Elimay25 Паскаль, Turbo Pascal, PascalABC.NET 1 01.03.2012 16:34
Имеется исходник просмотра bmp картинки и заголовков, необходимо переделать под png. Оплата DENISLED Фриланс 1 28.04.2011 14:16
C++ 1.3.9. Точное значение числа Фибоначчи frixer Помощь студентам 1 13.03.2011 19:13
Подбор параметра не точное значение magana Microsoft Office Excel 0 23.03.2010 22:24
SetWindowPos (точное расположение) BOBAH13 Win Api 2 19.02.2009 08:39