назад
Подробное описание деректив условной компиляции PNG декодера tinyPNG

замечание: убрать ту или иную директиву можно поставив две косые черты перед ней:
//{$DEFINE HIGHPRECISION}


    {$DEFINE MOSTCOMPATIBILITY}
Устанавливает все остальные директивы в максимально совместимый режим, декодер занимает максимально влзможный размер (не более 9 кб для сжатого ЕХЕ). Все последуешие описаные директивы не имеют зачение если объявлен MOSTCOMPATIBILITY.

    {$DEFINE csG}
Позволяет разблокировать код, отвечающий за распаковку изображений в палитре серого с глубиной цвета 1, 2, 4, 8 бит на канал (в данном случае и на пиксель). см также HIGHPRECISION.

    {$DEFINE csRGB}
Позволяет разблокировать код, отвечающий за распаковку изображений в RGB формате (TrueColor) глубиной цвета 8 бит на канал (24 бита на пиксель). см также HIGHPRECISION.

    {$DEFINE csIndexed}
Позволяет разблокировать код, отвечающий за распаковку изображений с палитрой с 1, 2, 4, 8 бит на пиксель.

    {$DEFINE csGA}
Позволяет разблокировать код, отвечающий за распаковку изображений в палитре серого с альфа каналом с глубиной цвета 8 бит на канал. Альфа канал игнорируется, но открыть эти изображения если не объявлен csGA, но объявлен csG нельзя, также как и изображения без алфа канала, если объявлен csGA, но не объявлен csG. см также HIGHPRECISION.

    {$DEFINE csRGBA}
Позволяет разблокировать код, отвечающий за распаковку изображений в RGB формате с альфа каналом с глубиной цвета 8 бит на канал (32 бита на пиксель). Все сказаное про альфа канал в описании csGA верно и для csRGBA. см также HIGHPRECISION.

    {$DEFINE HIGHPRECISION}
Позволяет добавить поддержку глубины цвета 16 бит на канал для всех цветовых форматов, кроме использующих палитру. Такие файлы - большая редкость (ИМХО) так что в большенстве случаев можно и не объявлять.

    {$DEFINE INTERLACE}
Поддержка "чересстрочных (interlaced)" изображений. Довольно сильно увеличивает размер декодера (~1 кб в несжатом виде)

    {$DEFINE CHECKCRCS}
Включает проверку контрольных сумм в файле. Пожалуй больше всего из всех описных директив влияет на скорость и размер декодера.

    {$DEFINE USEHACKS}
Позволяет выжать дополнительно несколько сотен байт кода, отключив проверку на поддерживаемые форматы и проверку ошибок файла. Предыдущяя деректива (проверка контрольных сумм) автоматически отключается. ВНИМАНИЕ! При попытке открыть поврежденного или не поддерживаемого PNG файла декодером со включеной дерективой USEHACKS  практически не избежен крах приложения. Используйте USEHACKS
для приложений, открывающих фиксированый набор картинок, зарание провереных на совместимость с этой директивой (например картинки хранятся в ресурсах приложения или в собственном хранилище ресурсов). При объявление этой директивы функция tinyLoadPNG возвращает либо tinyERROR_OK, либо вообще не возвращается ;)

    {$DEFINE ALLOWFILTERS}
Позволяет отключать фильтры PNG. Фильтры в основном не используются для палитры (но не факт). Изображение, которому нужен не включенный фильтр считается поврежденным. Но если проверка ошибок отключена (USEHACKS) то декодирование изображения не прирывается, но врятли пройдет верно. Для этой дерективы действуют следующие правила:
    - Объявление ALLOWFILTERS не включает всех фильтров.
    - Объявление всех фильтров не означает объявление ALLOWFILTERS
    - Не объявленный ALLOWFILTERS блокирует ВСЕ фильтры.

    {$DEFINE FILTER_SUB}, {$DEFINE FILTER_UP}, {$DEFINE FILTER_AVERANGE}, {$DEFINE FILTER_PAETH}
Включает код представленных фильтров. см также ALLOWFILTERS.

Реальные цифры относительно размеров декодера tinyPNG

В качестве "опытного образца" использовался проект tinyDemo.
Компилятор - Delphi 6,
Замена системных модулей от Владимира Кладова.
Упаковщик - UPX 1.26
Опции компилятора выставлялисть для получения минимальног размера.

замечание: значение в скобках означает "чистый" вес декодера (разность размеров с ним и без него).

Режимы компиляции Размер ЕХЕ файла Размер упакованого
ЕХЕ файла
Без tinyPNG
8,5
5,5
объявлен MOSTCOMPATIBILITY
28,0 (19,5)
14,5 (9)
объявлен csRGB и все фильтры
23,0 (14,5)
12,5 (7)
объявлен csRGB, все фильтры, проверка ошибок и CRC
26 (17,5)
13,5 (8)
объявлен csIndexed
23,0 (14,5)
12,0 (6,5)
объявлен csIndexed и проверка ошибок без CRC
23,5 (15,0)
12,5 (7)

Значение в 6,5 кб впечитляет, тем более что csIndexed наиболее распространеный и удобный формат, в большенстве случаев не требует фильтров.


Hosted by uCoz