Описание формата ICNS

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Описание формата ICNS

Сообщение apolsoft » 04.09.2009 14:16:10

У кого-нить есть описание формата иконок ICNS. Если есть, пример работы с этим форматом. Пишите на мыло: apol-lon@tut.by или в асю: 101-707-7
apolsoft
незнакомец
 
Сообщения: 1
Зарегистрирован: 04.09.2009 12:51:22

Re: Описание формата ICNS

Сообщение скалогрыз » 21.09.2009 10:57:23

проверь этот вот этот патчик: http://bugs.freepascal.org/view.php?id=14638

формат файла такой:

Код: Выделить всё
id   (4 byte - FourCharCode)  идентификатор файла: kIconFamilyType = 'icns'
size (4 byte - big endian Integer) размер файла целиком
[слой 1]
[слой 2]
...
[слой-N]


каждый слой представляют из себя следующее:
Код: Выделить всё
id   (4 byte - FourCharCode) - идентификатор закодированных данных: )
size (4 byte - big endian Integer)- размер слоя = 8 байт + размер данных
[... данные ...]


id слоя указывает, какие данные записаны, размер изображения и глубина цвета.
подробно для каждого id описана константа: icnsIconTypeInfo (в файле icnsTypes. спасибо Павлу Ишенину).

iitSmall32BitData, iitLarge32BitData, iitHuge32BitData, iitThumbnail32BitData: (16, 32, 48, 128) кодируются RLE сжатием. каждый компонент цвета кодируется отдельно от других.
Внимание Для цветового слоя 128х128 нужно дописывать четыре нулевых байта, перед началом RLE потоков. Для маски 128x128 и других слоёв этого делать НЕ нужно.

Для каждого из цветовых слоёв соответствует слой 8-битной маски:
iitSmall8BitMask, iitLarge8BitMask, iitHuge8BitMask, iitThumbnail8BitMask
слой никак не сжимается!

iit256PixelDataARGB, iit512PixelDataARGB: (256, 512) кодируются Jpeg2000 сжатием (есть портированные загаловки для OpenJpeg библиотеки. http://galfar.vevb.net/wp/projects/jpeg2000-for-pascal/ Можно исопльзовать её!).
Так как в сжатии Jpeg2000 используется alpha-канал, слой маски НЕ требуется.

Например у нас есть иконка 32х32, файл будет выглядеть следующим образом:
Код: Выделить всё
'icns'  - идентификтор файла
XXXX    - размер всего файла
'il32'  - идентификатор слоя 32x32
YYYY    - sizeof(R_RLE)+sizeof(G_RLE)+sizeof(B_RLE) + 8
  R_RLE - закодированный красный цвет слоя
  G_RLE - закодированный зелёный цвет слоя
  B_RLE - закодированный синий цвет слоя
'l8mk'  - индентификатор маски 32х32
ZZZZ    - sizeof(mask)+ 8 байт
  mask  - данные маски

ещё раз на помню: размеры в файле записаны в формате big-endian

ЗЫ: поддержи разработчиков Лазаруса, спонсируй каждому по Макбуку Про :D
ЗЗЫ: http://en.wikipedia.org/wiki/Apple_Icon_Image
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru
cron