A Microsoft Windows icon file contains one or more images, at resolutions up to 256 by 256 pixels and various bpp values. The images are encoded either as Portable Network Graphics file (PNG), or in a format similar to Microsoft's BMP format.
If encoded as BMP, the image includes an "AND mask", which contains 1-bit transparency data. It may also contain additional 8-bit transparency data together with the color information.
I.e. the bpp value gives the number of distinct colors, not the color depth.
BMP encoded images contain two pixel maps: The so-called "XOR mask" stores the color information for each pixel, and the "AND mask" stores the transparency belonging to it.
The names and the function of these maps are most easily understood by looking at how a 1-bpp icon image is rendered on a monochrome screen: The pixels on the screen are logically AND-ed with the bits on the AND mask, then the result is logically XOR-ed with the bits on the XOR mask.
The result is that if a bit on the AND mask is reset, the corresponding bit on the XOR mask determines the color of the pixel on the screen. If a bit in the AND mask is set and the corresponding bit in the XOR mask is black (reset), the image is transparent. Finally, if the bits are set in both the AND and XOR mask (the pixel on the XOR mask is white), the background of the screen is inverted.
In color environments, a pixel on the XOR mask outside the opaque area of the image is usually black and sometimes white, but a color other than black and white will hardly give predictable results.
Since Windows XP, there may also be an 8-bit transparency channel in 32-bpp BMP encoded icon images. The AND mask, however, is still required and used e.g. for generating shadows.
PNG encoded images don't contain AND masks. While rendering a PNG encoded image, Windows constructs an AND mask on the fly from the transparency channel, if present.
The Windows icon file format has undergone some extensions since it was invented in the mid-eighties for Windows 1:
Typical resolutions and bpp values of the Windows shell icons include:
|Windows 3||32x32||1, 4|
|Windows 4||16x16, 32x32, 48x48||4, 8|
|NT 5||16x16, 32x32, 48x48||4, 8, 32|
|NT 6||16x16, 32x32, 48x48||4, 8, 32|
|24x24, 96x96||8, 32|
|256x256||32 (PNG encoded)|
Within the icon file, the images with low bpp values are usually stored first. With the same bpp value, the images are sorted by resolution, large images first.
The MIME type of Windows icon files is registered by IANA as image/vnd.microsoft.icon, but the unofficial name image/x-icon is still widely used.
The file name extension (used by Microsoft operating systems as file type identifier) is .ico.