Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Кто в наши дни считает байты?Девиз «и так сойдёт!» — это не ко мне. Я в прошлом году написал пару программ под Dendy — вот уж где байты считал. Здесь же я даже особо и не усердствовал. Секции в исполняемом файле не объединял, необязательные ресурсы не удалял, выравнивание не уменьшал. А иконку было просто интересно сделать компактной, чтобы она весила хотя бы меньше самой программы.
А создавать PNG встроенные в ICO, кстати, позволяет редактор иконок ArtIcons.Платная. А позволяет ли она оптимизировать PNG внешними утилитами? Это было ключевым требованием. Не каждый кодер PNG даёт хороший результат. Предпочитаю использовать для этих целей инструменты, которые зарекомендовали себя в этом.
Даже некоторые авторы статей на Хабре...


Что касается оптимизации ICO, это возможно силами CQВот это неожиданность! Спасибо, в будущем буду пользоваться и этой возможностью.
P.S. Судя по скрину в статье, у вас старая версия CQ. В текущей версии значительно доработан алгоритм квантования и добавилось несколько полезных мелочей.Угу, я и сам заметил, что несколько месяцев назад вышла новая версия программы, но только уже после публикации статьи :)
к сожалению, я не нашёл какого-то открытого баг-трекераMicrosoft Connect
And check out the Technical Preview forum. This is a vibrant community where you can interact with Microsoft engineers and fellow Insiders.
рограмма — 14КБ, иконка 16×16 + 32×32 + 48×48 пикселей — 15КБ. Какое расточительство! :) К счастью оказалось, что Windows (начиная с Vista) поддерживает PNG внутри ICO. Это как раз то, что нужно!
Так это нормально ведь, что ресурсы занимают больше места чем код.Есть разница между просто программой и игрушкой. Плюс к этому, если есть возможность сжать ресурсы, но это не сделано — это халтура.
Звук СЕЕЕ-ГАААА при старте игры Sonic The Hedgehog 1/8 всего места на картридже занимает, и ничего.Тут проблема явно была в том, что процессор Сеги не потянул бы в реальном времени декодирование чего-то серьёзного вроде MP3. По возможности и там ресурсы сжимались. На NES в играх даже строки иногда были упакованы каким-нибудь простым алгоритмом. Я, конечно, не призываю к такому драматизму, просто пример.
Ну и почему бы тогда вообще все на FASM не писать.Ну если хотите таких крайностей — никто не запрещает вам писать всё на ассемблере. Есть разница между небольшими оптимизациями, которые не требуют много времени на реализацию, и между теми оптимизациями, которые требуют чрезвычайных усилий при минимальном выхлопе.
Напишите программу, которая при первом запуске сама себе процедурно генерирует красивую иконку.Проводник не сможет отобразить такую иконку.
Ну у меня случился разрыв шаблона от понимания, что иконка программы весит больше, чем сама программа.
помнится я предложил чтоб защитить файл ресурсов от извлечения из программы, положить его не папку с файлами, а инкапсулировать в бинарник ввиде char []И в чём будет проблема найти этот массив по какому-то смещению и скопировать напрямую из бинарника?
а тут такое — как к такому отнесся коллектив?Мелкие утилитки пишут обычно в одиночку. И на самом деле такой подход мне кажется более удобным. Раньше я сохранял каждый нужный размер иконки в PNG32 в полноценном графическом редакторе, затем по одному файлику вручную импортировал их в иконку при помощи бесплатной версии IcoFX. Сейчас же для того, чтобы собрать иконку из пачки PNG файлов, достаточно просто запустить один батник, подправив немного asm файл, если вдруг поменялся набор размеров (что бывает нечасто). Можно в принципе и написать небольшую программу, которая бы автоматически собирала из пачки PNG файлов иконку. Но вариант с FASM мне показался проще и быстрее. При желании можно и конвертацию в PNG8 тоже автоматизировать при помощи консольной truepng :) Есть правда вероятность, что может возникнуть описанная выше проблема с неправильной маской. Вот бы MS исправила эту проблему, вообще хорошо стало бы!
convert icon.png -bordercolor white -border 0 \
\( -clone 0 -resize 48x48 -colors 256 \) \
\( -clone 0 -resize 32x32 -colors 256 \) \
\( -clone 0 -resize 16x16 -colors 256 \) \
\( -clone 0 -resize 256x256 -colors 256 \) \
\( -clone 0 -resize 48x48 \) \
\( -clone 0 -resize 32x32 \) \
\( -clone 0 -resize 24x24 \) \
\( -clone 0 -resize 16x16 \) \
icon.ico
Сборка ICO файла с иконками в формате PNG при помощи FASM