stringtranslate.com

ICO (формат файла)

Формат файла ICO — это формат файла изображения для компьютерных иконок в Microsoft Windows . Файлы ICO содержат одно или несколько небольших изображений с различными размерами и глубиной цвета , так что их можно масштабировать соответствующим образом. В Windows все исполняемые файлы , которые отображают иконку для пользователя на рабочем столе, в меню «Пуск» или в проводнике, должны содержать иконку в формате ICO.

Формат файла CUR — это почти идентичный формат файла изображения для неанимированных курсоров в Microsoft Windows. Единственные различия между этими двумя форматами файлов — это байты, используемые для их идентификации, и добавление горячей точки в заголовок формата CUR; горячая точка определяется как смещение пикселей (в координатах x, y) от верхнего левого угла изображения курсора, куда пользователь фактически наводит мышь. [ необходима цитата ]

Формат файла ANI используется для анимированных курсоров Windows .

История

Значки, представленные в Windows 1.0, имели размер 32×32 пикселя и были монохромными. [2] Поддержка 16 цветов была представлена ​​в Windows 3.0 . [ требуется ссылка ]

Win32 представила поддержку хранения изображений значков до 16,7 миллионов цветов (TrueColor) и размером до 256×256 пикселей. [3] Windows 95 также представила новый движок Device Independent Bitmap (DIB). [4] Однако в Windows 95 глубина цвета значков по умолчанию составляла 256 цветов. Можно было включить 65535-цветные (Highcolor) значки, либо изменив значение Shell Icon BPP в реестре [3] [5] , либо купив Microsoft Plus! для Windows 95. Значение Shell Icon Size позволяет использовать значки большего размера вместо значков 32×32, а значение Shell Small Icon Size позволяет использовать пользовательские размеры вместо значков 16×16. [3] Таким образом, один файл значка мог хранить изображения любого размера от 1×1 пикселя до 256×256 пикселей (включая неквадратные размеры) с 2 (используется редко), 16, 256, 65535 или 16,7 миллионами цветов; но оболочка не могла отображать очень большие значки. Область уведомлений панели задач Windows была ограничена 16 цветными значками по умолчанию до Windows Me , когда она была обновлена ​​для поддержки значков с высокой цветовой насыщенностью.

В Windows XP добавлена ​​поддержка 32-битных цветных (16,7 миллионов цветов плюс 8-битная прозрачность альфа-канала ) изображений значков, что позволяет отрисовывать на значке полупрозрачные области, такие как тени , сглаживание и эффекты, похожие на стекло. По умолчанию в Windows XP в проводнике Windows используются значки размером 48×48 пикселей . Windows XP можно принудительно использовать значки размером до 256×256, изменив значение размера значка Shell , но это приведет к увеличению масштаба всех значков размером 32×32 во всей оболочке. [3] Microsoft рекомендует для Windows XP только значки размером до 48×48 пикселей. [6] Windows XP может уменьшать масштаб больших значков, если нет изображения меньшего размера. [3]

Windows Vista добавила полную поддержку 256×256-пиксельных 32-битных цветных иконок, [Примечание 1], а также поддержку сжатого формата PNG . Хотя сжатие не требуется, Microsoft рекомендует, чтобы все 32-битные цветные иконки 256×256 в файлах ICO хранились в формате PNG, чтобы уменьшить общий размер файла. Проводник Windows Vista поддерживает плавное масштабирование иконок до нестандартных размеров, которые визуализируются «на лету», даже если изображение для этого размера отсутствует в файле иконки. Оболочка Windows Vista добавляет ползунок для «масштабирования» размеров иконок. При использовании пользователями более высоких разрешений и режимов с высоким DPI рекомендуются более крупные форматы иконок (например, 256×256). [7] [8]

MIME-тип

Хотя зарегистрированным в IANA типом MIME для файлов ICO является image/vnd.microsoft.icon[ 9], он был представлен в IANA в 2003 году третьей стороной и не распознается программным обеспечением Microsoft, которое вместо этого использует image/x-iconили image/ico. [10] [11] Ошибочные типы image/ico, image/icon, text/icoи application/icoтакже были замечены в использовании. [9]

Структура файла значка

Файл ICO или CUR состоит из структуры ICONDIR («Каталог значков»), содержащей структуру ICONDIRENTRY для каждого изображения в файле, за которой следует непрерывный блок всех данных растрового изображения (которые могут быть в формате Windows BMP , за исключением структуры BITMAPFILEHEADER, или в формате PNG , сохраненном целиком). [3]

Изображения с глубиной цвета менее 32 бит следуют определенному формату: изображение кодируется как единое изображение, состоящее из цветовой маски («маска XOR») вместе с маской непрозрачности («маска AND»). [6] [3] Маска XOR должна предшествовать маске AND внутри данных растрового изображения; если изображение хранится в порядке снизу вверх (что, скорее всего, так и есть), маска XOR будет нарисована под маской AND. Маска AND составляет 1 бит на пиксель, независимо от глубины цвета, указанной в заголовке BMP, и указывает, какие пиксели полностью прозрачны (1), а какие полностью непрозрачны (0). Маска XOR соответствует глубине цвета, указанной в заголовке BMP, и указывает числовое значение цвета или палитры для каждого пикселя. Вместе маска AND и маска XOR создают непрозрачное изображение, представляющее изображение с прозрачностью 1 бит; они также позволяют инвертировать фон. Высота изображения в структуре ICONDIRENTRY файла ICO/CUR принимает высоту предполагаемых размеров изображения (после того, как маски будут составлены), тогда как высота в заголовке BMP принимает высоту двух объединенных изображений масок (до их составления). Таким образом, маски должны иметь одинаковые размеры, а высота, указанная в заголовке BMP, должна быть ровно в два раза больше высоты, указанной в структуре ICONDIRENTRY. [12]

32-битные изображения (включая 32-битные изображения BMP в формате BITMAPINFOHEADER [Примечания 2] ) — это, в частности, 24-битные изображения с добавлением 8-битного канала для альфа-композиции . Таким образом, в 32-битных изображениях маска AND не требуется, но рекомендуется для рассмотрения. Windows XP и выше будут использовать 32-битное изображение в режиме менее True color , создавая маску AND на основе альфа-канала (если он еще не находится в изображении), если в файле ICO/CUR не указана 24-битная версия изображения. Однако более ранние версии Windows интерпретируют все пиксели со 100% непрозрачностью, если только маска AND не указана вместе с изображением. Предоставление пользовательской маски AND также позволит автору значка выполнять настройку и подсказки. Даже если маска AND не указана, если изображение находится в формате Windows BMP, заголовок BMP все равно должен указывать удвоенную высоту.

Важно отметить, что в маске AND, как и для массива пикселей битовой карты , байты заполнения должны быть добавлены в конец каждой строки, чтобы увеличить ее длину до кратной четырем байтам, поскольку это в основном (монохромная) битовая карта. [3] Маска AND битовой карты 8x8 пикселей будет иметь 1 байт данных и 3 байта заполнения (8*8*1bpp = 64 бита/8 = 8 байтов всех строк, поэтому каждая строка составляет 1 байт и требуется 3 байта заполнения), маска AND битовой карты 16x16 будет иметь 2 байта данных и 2 байта заполнения, маска AND битовой карты 32x32 будет иметь 4 байта данных и никакого заполнения. Обратите внимание, что количество необходимых байтов заполнения зависит от размеров битовой карты, а не от ее цветовой глубины, поскольку маска AND в любом случае составляет 1 бит на пиксель.

Контур

Все значения в файлах ICO/CUR представлены в порядке байтов от младшего к старшему .

Структура каталога изображений

Справочные данные изображения

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

Формат BMP

Если изображение сохранено в формате BMP, оно должно исключать открывающую структуру BITMAPFILEHEADER .

Высота изображения BMP должна быть в два раза больше высоты, объявленной в каталоге изображений. Это связано с тем, что фактические данные изображения будут содержать две части: фактическое изображение, за которым сразу следует 1-битная маска того же размера, что и изображение, используемая для определения того, какие пиксели будут нарисованы.

Маска должна быть выровнена по DWORD (32 бита) и должна быть заполнена нулями. Пиксель 0 означает «соответствующий пиксель на изображении будет нарисован», а 1 означает «игнорировать этот пиксель». Цвет пикселя либо явный для 24- и 32-битных версий (не имеющих цветовых таблиц), либо индексируется для других глубин (1,2,4,8,16) в таблице четырехбайтовых (BGRA) цветов, которая следует за BITMAPINFOHEADER.

Для 1 бита обычно используются два цвета: #00000000 и #00FFFFFF, а канал A игнорируется.

Данные пикселей для 1,2,4,8 и 16 бит упакованы побайтно и выровнены по типу DWORD.

24-битные изображения хранятся как тройки BGR, но не выровнены по типу DWORD.

32-битные изображения хранятся в виде квадраторов BGRA.

Первоначально ICO и CUR предназначались для использования на монохромных дисплеях и использовали формулу Output = (Existing AND Mask) XOR Image, но на цветных экранах курсор формируется с использованием смешивания каналов A, а маска используется для определения того, какие пиксели включены или исключены.

Формат PNG

Если изображение сохранено в формате PNG, то BITMAPINFOHEADER отсутствует, и вместо него используется полное содержимое изображения PNG.

Возможность чтения изображений PNG из изображений формата ICO была представлена ​​в Windows Vista . [7] Изображение PNG может быть сохранено в файле image таким же образом, как это делается для стандартного изображения формата Windows BMP, за исключением того, что изображение PNG должно быть сохранено целиком, с заголовком файла и должно быть в формате 32bpp ARGB. [7]

Примечание: файлы CUR не могут использовать данные изображений PNG и должны использовать данные изображений BMP в соответствии с ICO. [7]

Ресурсы иконок и курсоров

Значки и курсоры в файлах Portable Executable ( EXE или DLL ) организованы в ресурсы типа RT_GROUP_ICON , RT_GROUP_CURSOR , RT_ICON и RT_CURSOR . [13]

Ресурсы RT_GROUP_ICON и RT_GROUP_CURSOR содержат структуру NEWHEADER и одну или несколько структур RESDIR , которые имеют почти тот же формат, что и соответствующие структуры ICONDIR и ICONDIRENTRY в файлах ICO/CUR. Главное отличие в RESDIR заключается в том, что последний член структуры содержит двухбайтовый идентификатор ресурса RT_ICON / RT_CURSOR вместо смещения изображения в файле.

Структуры NEWHEADER / RESDIR во многих источниках также называются GRPICONDIR / GRPICONDIRENTRY . [14]


Ресурсы RT_ICON и RT_CURSOR имеют тот же формат данных изображения, что и в файлах ICO, и могут также хранить изображения PNG. Кроме того, первые четыре байта данных ресурса RT_CURSOR содержат данные о точке доступа курсора в виде двух значений WORD (16 бит) (в отличие от файлов CUR, в которых данные о точке доступа содержатся в структуре ICONDIRENTRY ). [15]

Библиотека иконок

Библиотека иконок — это способ упаковки иконок Windows. Обычно это 16-битный новый исполняемый файл или 32-битный портативный исполняемый файл с расширением .ICL, где ресурсы иконок представляют собой упакованные иконки. Windows Vista и более поздние версии не поддерживают просмотр иконок из 16-битных ( новых исполняемых ) файлов. [16]

Смотрите также

Примечания

  1. ^ abcde Начиная с Windows 95 размер изображения в структуре ICONDIRENTRY может быть установлен на ноль, что означает 256 пикселей. Начиная с Windows Vista размер изображения определяется из структуры BITMAPINFOHEADER или данных изображения PNG, что технически позволяет хранить значки размером более 256 пикселей, но такие большие размеры не рекомендуются Microsoft.
  2. ^ Классический формат битовой карты BITMAPINFOHEADER поддерживает хранение изображений с 32 битами на пиксель. При сохранении в виде отдельного файла .BMP "старший байт в каждом [пикселе] не используется". Однако, когда эти же данные сохраняются в файле ICO или CUR, Windows XP (первая версия Windows, поддерживающая файлы ICO/CUR с более чем 1 битом прозрачности) и выше интерпретируют этот байт как альфа-значение.
  3. ^ ab Установка цветовых плоскостей на 0 или 1 обрабатывается операционной системой одинаково, но если цветовые плоскости установлены выше 1, это значение должно быть умножено на биты на пиксель, чтобы определить окончательную глубину цвета изображения. Неизвестно, устойчивы ли различные версии операционной системы Windows к различным значениям цветовых плоскостей.
  4. ^ ab "Поддержка значков и курсоров Windows XP". Microsoft. 18 ноября 2005 г. Архивировано из оригинала 2011-06-30 . Получено 2023-07-03 . Курсор загружается правильно, независимо от глубины цвета, при которой был создан курсор. Однако система не может различать несколько кандидатов в одном файле курсора или ресурсе, которые отличаются только глубиной цвета. Значки, однако, полностью поддерживают несколько кандидатов на значки с различной глубиной цвета.
  5. ^ ab Биты на пиксель могут быть установлены в ноль, но могут быть выведены из других данных; в частности, если битовая карта не сжата в PNG, то биты на пиксель могут быть вычислены на основе длины данных битовой карты относительно размера изображения. Если битовая карта сжата в PNG, то биты на пиксель хранятся в данных PNG. Неизвестно, содержат ли различные версии операционной системы Windows логику для выведения битовой глубины для всех возможностей, если это значение установлено в ноль.

Ссылки

  1. ^ "MIME Sniffing Standard". WHATWG. 17 января 2014 г. Архивировано из оригинала 27.03.2014 . Получено 18.04.2014 .
  2. ^ Фекете, Дьёрдь (11 марта 2009 г.). «Проектирование интерфейса операционной системы в период с 1981 по 2009 гг.». Webdesigner Depot . Получено 6 июня 2011 г.
  3. ^ abcdefgh Хорник, Джон (29 сентября 1995 г.). "Иконки". Технические статьи по пользовательскому интерфейсу Windows ( MSDN ) . Корпорация Microsoft . Получено 5 июня 2011 г.
  4. ^ "Компоненты архитектуры Windows 95". Microsoft TechNet . Корпорация Microsoft . Получено 6 июня 2011 г. .
  5. ^ "Shell Icon BPP". Справочник по реестру Windows 2000 (Microsoft TechNet) . Корпорация Microsoft . Получено 6 июня 2011 г. .
  6. ^ ab "Создание иконок Windows XP". Технические статьи Windows XP (MSDN) . Корпорация Microsoft. Июль 2001 г. Получено 27.11.2022 .
  7. ^ abcd Чен, Рэймонд (22 октября 2010 г.). «Эволюция формата файла ICO, часть 4: изображения PNG». The Old New Thing — Блоги разработчиков Microsoft . Получено 27.11.2022 .
  8. ^ "Иконки (основы дизайна) - приложения Win32". learn.microsoft.com . 9 февраля 2021 г. Максимальный размер иконок составляет 256x256 пикселей, что делает их подходящими для дисплеев с высоким разрешением (точек на дюйм). Эти иконки с высоким разрешением обеспечивают высокое визуальное качество в представлениях списков с большими иконками... Следует включать только 32-битную копию изображения размером 256x256 пикселей, и только изображение размером 256x256 пикселей следует сжимать, чтобы уменьшить размер файла.
  9. ^ ab Butcher, Simon (3 сентября 2003 г.). "image/vnd.microsoft.icon" . Получено 3 января 2014 г. .
  10. ^ Лоуренс, Эрик (11 февраля 2011 г.). "Список незначительных изменений IE9 RC". IEInternals . Блоги MSDN . Получено 20 августа 2016 г. Мы используем "image/x-icon", потому что это тип MIME, который мы всегда использовали. Кто-то в какой-то момент (насколько мне известно, не связанный с Microsoft) предложил зарегистрировать тип MIME как "vnd.microsoft.icon", но Windows на самом деле его не использует, а использует image/x-icon.См. второй комментарий.
  11. ^ Компонент Windows Imaging — Обзор формата ICO
  12. ^ Чен, Рэймонд (2010-10-19). «Эволюция формата файла ICO, часть 2: Теперь в цвете!». The Old New Thing . Получено 2022-12-30 .
  13. ^ "Форматы файлов ресурсов - приложения Win32". learn.microsoft.com . 2020-08-19 . Получено 2023-05-22 .
  14. ^ Чен, Рэймонд (20 июля 2012 г.). «Формат ресурсов значков». The Old New Thing — Блоги разработчиков Microsoft . Получено 20 мая 2023 г.
  15. ^ "Структура LOCALHEADER - приложения Win32". learn.microsoft.com . 2020-12-11 . Получено 2023-05-22 .
  16. ^ Чен, Рэймонд (май 2008 г.). «Конфиденциально о Windows — 16-битные значки уже устарели». Журнал TechNet . Получено 27 ноября 2022 г.

Внешние ссылки