Формат файла 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 также представлен новый механизм растровых изображений, независимых от устройств (DIB). [4] Однако глубиной цвета значков по умолчанию в Windows 95 была глубина цвета 256 цветов. Можно было включить значки с 65535 цветами (Highcolor) , изменив значение Shell Icon BPP в реестре [3] [5] или купив Microsoft Plus. ! для Windows 95. Значение «Размер значка оболочки» позволяет использовать значки большего размера вместо значков 32×32, а значение «Размер значка оболочки малого размера» позволяет использовать нестандартные размеры вместо значков 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 по умолчанию использует значки размером 48×48 пикселей в проводнике Windows . Windows XP можно заставить использовать значки размером до 256×256, изменив значение размера значка оболочки, но это приведет к увеличению масштаба всех значков размером 32×32 во всей оболочке. [3] Microsoft рекомендует только размеры значков до 48×48 пикселей для Windows XP. [6] Windows XP может уменьшить масштаб значков большего размера, если изображения более близкого размера недоступны. [3]
В Windows Vista добавлена полная поддержка 32-битных цветных значков размером 256×256 пикселей [Примечания 1] , а также поддержка сжатого формата PNG . Хотя сжатие не требуется, Microsoft рекомендует хранить все 32-битные цветные значки размером 256×256 в файлах ICO в формате PNG, чтобы уменьшить общий размер файла. Проводник Windows Vista поддерживает плавное масштабирование значков до нестандартных размеров, которые отображаются «на лету», даже если в файле значков нет изображения такого размера. В оболочку Windows Vista добавлен ползунок для «увеличения» и уменьшения размеров значков. Пользователям, использующим более высокие разрешения и режимы с высоким разрешением, рекомендуется использовать более крупные форматы значков (например, 256×256). [7] [8]
Хотя зарегистрированный в IANA тип MIME для файлов ICO — image/vnd.microsoft.icon
, [9] он был отправлен в IANA в 2003 году третьей стороной и не распознается программным обеспечением Microsoft, которое использует image/x-icon
или image/ico
вместо него. [10] [11] Ошибочные типы image/ico
, image/icon
, text/ico
and application/ico
также встречались в использовании. [9]
Файл ICO или CUR состоит из структуры ICONDIR («каталог значков»), содержащей структуру ICONDIRENTRY для каждого изображения в файле, за которой следует непрерывный блок всех данных растрового изображения (которые могут быть в формате Windows BMP , за исключением структуры BITMAPFILEHEADER или в формате PNG , хранящегося целиком). [3]
Изображения с глубиной цвета менее 32 бит следуют определенному формату: изображение кодируется как одно изображение, состоящее из маски цвета («маска XOR») вместе с маской непрозрачности («маска И»). [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 , создавая маску AND на основе альфа-канала (если он еще не находится в изображении), если в нем не указана 24-битная версия изображения. файл ICO/CUR. Однако более ранние версии Windows интерпретируют все пиксели со 100% непрозрачностью, если с изображением не указана маска И. Предоставление пользовательской маски AND также позволит автору значка настраивать и подсказывать. Даже если маска AND не указана, если изображение имеет формат Windows BMP, заголовок BMP все равно должен указывать удвоенную высоту.
Важно отметить, что в маске AND, как и в случае с массивом пикселей растрового изображения , в конец каждой строки необходимо добавлять байты заполнения, чтобы увеличить ее длину до кратной четырем байтам, поскольку по сути это (монохромный) битовая карта. [3] И-маска растрового изображения размером 8x8 пикселей будет иметь 1 байт данных и 3 байта заполнения (8*8*1bpp = 64 бита/8 = 8 байт общего количества строк, поэтому каждая строка состоит из 1 байта и 3 байтов заполнения). необходимы дополнения), маска И растрового изображения 16x16 будет содержать 2 байта данных и 2 байта заполнения, маска И растрового изображения 32x32 будет иметь 4 байта данных и не иметь заполнения. Обратите внимание, что количество необходимых байтов заполнения зависит от размеров растрового изображения, а не от его глубины цвета, поскольку маска И независимо составляет 1 бит на пиксель.
Все значения в файлах ICO/CUR представлены в порядке байтов с прямым порядком байтов.
Все данные изображения, на которые ссылаются записи в каталоге изображений, идут непосредственно после каталога изображений. Обычно их следует хранить в том же порядке, который определен в каталоге изображений.
Напомним, что если изображение хранится в формате BMP, оно должно исключать открывающую структуру BITMAPFILEHEADER , тогда как если оно хранится в формате PNG, оно должно храниться целиком.
Обратите внимание, что высота изображения BMP должна быть в два раза больше высоты, объявленной в каталоге изображений. Вторая половина растрового изображения должна представлять собой маску И для существующих пикселей экрана, а выходные пиксели задаются формулой Output = (Existing AND Mask) XOR Image
. Установите маску везде равной нулю для чистой перезаписи.
Возможность чтения изображений PNG из изображений формата ICO и CUR была представлена в Windows Vista . [7] Изображение PNG может быть сохранено в изображении так же, как это делается для изображения стандартного формата Windows BMP, за исключением того, что изображение PNG должно храниться целиком, с заголовком файла, и должно быть в формате ARGB с разрешением 32 бита на пиксель. формат. [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 содержат данные активной точки курсора в виде двух 16-битных значений (в отличие от файлов CUR, в которых данные активной точки содержатся в структуре ICONDIRENTRY ). [15]
Библиотека значков — это способ упаковки значков Windows. Обычно это 16-разрядный новый исполняемый файл или 32-разрядный двоичный переносимый исполняемый файл с расширением .ICL, в котором ресурсы значков представляют собой упакованные значки. Windows Vista и более поздние версии не поддерживают просмотр значков из 16-битных ( новых исполняемых файлов) файлов. [16]
Курсор загружается правильно с любой глубиной цвета, при которой был создан курсор. Однако система не может различить несколько кандидатов в одном и том же файле курсора или ресурсе, которые отличаются только глубиной цвета. Однако значки полностью поддерживают несколько вариантов значков с различной глубиной цвета.
Максимальный размер значков составляет 256x256 пикселей, что делает их подходящими для дисплеев с высоким разрешением (точек на дюйм). Эти значки с высоким разрешением обеспечивают высокое визуальное качество в представлениях списков с большими значками... Следует включать только 32-битную копию изображения размером 256x256 пикселей, и только изображение 256x256 пикселей следует сжимать, чтобы уменьшить размер файла.
Мы используем «image/x-icon», потому что это тип MIME, который мы всегда использовали. Кто-то в какой-то момент (AFAIK, не связанный с Microsoft) предложил зарегистрировать тип MIME как «vnd.microsoft.icon», но Windows на самом деле это не использует, а использует image/x-icon.
Смотрите второй комментарий.