Сказка О Древних Иконах. Загадка 18 Цветов. Прозрачные И Инверсные Цвета

Мало кого в наши дни не волнует лишний килобайт или два.

Но такие люди есть, и именно для такого ботаника написана эта заметка.

) В тех единичных случаях, когда мне нужно было записать выразительную иконку (.

ico) приложения и при этом нужно было сохранить байты, я использовал следующий хак: записывал изображение в 16-цветном режиме — но! - не в обычной фиксированной палитре, а в адаптивной.

Что это дает? Иконка 48х48, прозрачность 1 бит, 256 цветов = 3774 байт, также в 16 цветах = 1662 байт. Прирост составляет 2 килобайта, при небольшом падении качества изображения.



Сказка о древних иконах.
</p><p>
 Загадка 18 цветов.
</p><p>
 Прозрачные и инверсные цвета

Пример.

Слева направо:

  • 256-цветный оригинал
  • фиксированная стандартная 16-цветная палитра (и тут я потратил пару минут на подбор штриховки, чтобы изображение имело хоть какой-то приличный вид)
  • адаптивная палитра из 16 цветов + шейдинг (дизеринг).

Как это работает? Как ни странно, 16-цветный значок всегда содержит в себе палитру.

То есть 99,9% старых иконок несут в себе одну и ту же 64-байтовую таблицу цветов (по 4 байта на цвет).

И да, оказывается, его можно перепрограммировать.

К сожалению, я не знаком с программой, которая могла бы полноценно работать с такого рода иконками.

Поэтому вот рецепт, как «недоделанно» состряпать такую иконку: берем IrfanView, загружаем в нее изображение: либо заранее подготовленное 16-цветное, либо уменьшаем количество цветов прямо в нем: меню — изображение — уменьшить глубину цвета.

- 16 цветов.

Теперь: меню – сохранить как… – выбрать формат .

ico. Все? Нет, не всё: Irfan View не умеет работать с прозрачностью; его придется восстанавливать вручную в другой программе.

Microangelo Studio умеет загружать и редактировать такие иконки (увы, она не позволяет создать из них библиотеку, как и создание таких иконок «с нуля»).

Загружаем иконку в Microangelo и.

пожалуй, сразу получаем окно с предупреждением о «неправильной палитре» — что это означает на практике, речь пойдет дальше.

Используйте инструменты «Заливка» и «Карандаш», чтобы отметить прозрачные области; записывать; готовый! Это было то, что я делал раньше, около десяти лет назад. Теперь, присмотревшись к палетке Microangelo, у меня возникли вопросы.

Что это за странная палитра, 18 цветов? Как вообще можно хранить в файле 18 цветов? Число не круглое, господа программисты так не поступают; им это просто не удобно.

)) Видно, что в палитре 16 сплошных цветов и два служебных цвета: «прозрачный» и «инверсный».

Что такое «обратный»? — если такой цвет встречается, то он отражает негатив того, что лежит под ним; Чаще всего это используется в курсорах; и курсор - и по сути, и по структуре файла - тоже иконка.

Но как хранятся все эти цвета? Если обычные пиксели изображения упакованы в 4 бита (16 цветов), то прозрачность можно сохранить только в виде отдельной битовой маски (1 бит на пиксель изображения).

Хорошо, а где тогда хранится инверсия? Еще одна маска, что ли? Не экономично, но возможно.

Давайте посчитаем.

Иконка 48x48, 16 цветов, 1 изображение.

Размер файла 1662 байта.

Что в ней? Я слабо разбираюсь в тонкостях, но давайте попробуем разобраться.

Основная часть, само изображение: 48*48/2 = 1152 байт. Палитра: 16*4 = 64 байта.

Маска прозрачности 48*48/8 = 288 байт. Заголовок .

ico, официально = 6 байт. Описание фрейма (1 штука) из документации = 16 байт. Итого: 1152+64+288+6+16 = 1526. Вероятно, там что-то еще, потому что реальный размер файла больше - но это не важно; Важно другое: остаток «несходства» невелик: 136 байт, и он явно не позволяет разместить еще одну битовую маску размером 288 байт. Итак.

инверсный цвет каким-то образом встроен в саму картинку.

Может быть, теперь вы сами догадаетесь, как им это удалось? И сделали это, судя по всему, так: в оригинальной Windows (кажется, начиная с Win 95OSR2 полностью, а в Win XP и новее - уже частично) в иконках и курсорах, строго говоря, настоящего прозрачного цвета не существовало.

Если альфа-маска показала: текущая точка курсора/значка «прозрачна» — цвет под курсором/значком был взят и подвергнут операции XOR («исключающее «или»; а может быть, было просто вычитание) — внимание! – с текущим цветом точки, взятым из палитры иконок.

Что происходит? Если это был первый цвет (черный в фиксированной палитре), XOR «ничего» не делал с фоном — цвет просто становился прозрачным.

Если это был последний цвет (в фиксированной палитре – белый) – цвет менялся полностью, превращаясь в негатив.

Вот и весь секрет того, как хранились «18 цветов».

То есть еще раз: «прозрачный» = черная (+) альфа-маска, «инверсный» = белая (+) альфа-маска.

Теперь поговорим о «глюках».

Упомянутое выше предупреждение Microangelo гласит: «У вас в палитре нет полноценных белого и черного цветов, работать с прозрачностью будет некорректно!» Действительно, наша адаптивная палитра легко может обойтись без черного или белого цвета.

Как тогда будет работать прозрачность? Да, именно так, как мы и ожидали: он возьмет какой-нибудь цвет из палитры (например, зеленый), «исключающее ИЛИ» его с фоном, и мы получим вместо прозрачности красивый фиолетовый цвет. )) Или другой пример — черный цвет случайно занял место последнего цвета в палитре: и «инверсия» превратилась в обычную полную прозрачность.



Сказка о древних иконах.
</p><p>
 Загадка 18 цветов.
</p><p>
 Прозрачные и инверсные цвета

Пример: слева стандартная палитра, справа перепрограммированная.

Слева прозрачность (P) и инверсия (I) работают как надо; справа - явно нет. Однако все эти прелести иконок мы можем наблюдать только в оригинальной Windows. Современные операционные системы, такие как Win 10, игнорируют цвета палитры, а битовая маска «прозрачность» всегда работает точно так же, как прозрачность в чистом виде: здесь нет XOR, и соответственно нет и инверсии.

Однако совместимость в механизме отображения курсора всё же есть — там работает полноценная старая добрая экономичная схема; «теплый, ламповый», и.

мало кто это понимает и нуждается в этом.



Сказка о древних иконах.
</p><p>
 Загадка 18 цветов.
</p><p>
 Прозрачные и инверсные цвета

Пример: разное отображение одних и тех же значков в Windows XP и Windows 7. Теги: #Работа с иконками #ico #cur

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.