// Workers AI · dad joke modeWhat did the ICO file say? I'm a little pixel-ated.
| ICO | |
|---|---|
A Windows icon (Favorites Folder) | |
| Filename extension | .ico |
| Internet media type | image/x-icon[1] (but see below) |
| Uniform Type Identifier (UTI) | com.microsoft.ico |
| Developed by | Microsoft |
| Type of format | Graphics file format for computer icons |
| Container for | BMP and PNG |
| Extended to | CUR |
| CUR | |
|---|---|
A Windows mouse cursor | |
| Filename extension | .cur |
| Internet media type | image/vnd.microsoft.icon |
| Uniform Type Identifier (UTI) | com.microsoft.cur |
| Developed by | Microsoft |
| Type of format | Graphics file format for mouse cursors |
| Container for | BMP and PNG |
| Extended from | ICO |
The ICO file format is an image file format for computer icons in Microsoft Windows. ICO files contain one or more images at multiple sizes and color depths, such that they may be scaled appropriately. In Windows, all executables that display an icon to the user, on the desktop, in the Start Menu, or in File Explorer, must carry the icon in ICO format.
The CUR file format is an almost identical image file format for non-animated cursors in Microsoft Windows. The only differences between these two file formats are the bytes used to identify them and the addition of a hotspot in the CUR format header; the hotspot is defined as the pixel offset (in x,y coordinates) from the top-left corner of the cursor image to where the user is actually pointing the mouse.[2] While still partially supported in current web browsers for legacy reasons[3], the screen pixel inversion feature was never implemented there.[4]
The ANI file format is used for animated Windows cursors. ANI is a RIFF container; each frame within it is a complete CUR-format image and may itself contain images at multiple sizes.
History
[edit]Icons introduced in Windows 1.0 were monochrome;[5] in Windows 1.x and 2.x, ICO and CUR files were raw binary images with no directory wrapper — each file contained a single such image, at 64×64 pixels for icons and 32×32 for cursors.[6] The 64×64 icon size was designed for a 1024×1024 target display and was shown downscaled on the lower-resolution monitors of the era.[6] Applications could only load icons and cursors from resources compiled into their executable module, via the LoadIcon and LoadCursor functions respectively; loading directly from a standalone .ico or .cur file was not yet supported.[citation needed] The multi-image ICONDIR format and the DIB-based frame layout were introduced in Windows 3.0, using the 40-byte BITMAPINFOHEADER as the norm; the legacy 12-byte BITMAPCOREHEADER (OS/2 Presentation Manager 1.x format) appeared only in rare early samples.[citation needed] Shipping 3.x icons used only 1 bpp (monochrome) and 4 bpp (16-color VGA),[7] typically pairing both depths in a single file; 8 bpp was not yet used.[citation needed]
With Windows 95, the icon directory gained the headroom to describe images of any size from 1×1 up to 256×256 pixels (including non-square sizes) — by letting a bWidth or bHeight value of 0 stand for 256 pixels[8] — and added a new 32 bpp colour depth (16.7 million colours, without an alpha channel) on top of the 1, 4 and 8 bpp depths the format already supported; though these were format capabilities rather than depths the shell of the era actually rendered, and the shell could not display very large icons.[9][10] Shipped system icons of the era remained 16-color (4 bpp) in practice.[7] It was possible to enable 16-bit (65535 color) icons by setting the Shell Icon BPP value in the registry;[9][11][12][13] the high-colour icons feature of Microsoft Plus! for Windows 95 applied this setting. The Shell Icon Size registry value set the size of the large (desktop) shell icons and could be adjusted from 16 to 72 pixels through the Appearance tab of the Display Properties dialog, defaulting to 32 pixels;[9][14] the small shell icon size was fixed and could not be changed.[9][12] The notification area of the Windows taskbar was limited to 4 bpp icons until Windows Me when it was updated to support 16-bit icons.[citation needed]
Windows NT 4.0 was the first release to ship system icons at 8 bits per pixel (256 colours) and to add a 48×48-pixel size alongside the existing 16×16 and 32×32.[7] The 256-colour depth and the 48×48 size became common across the 98, Me and 2000 generation.[citation needed]
Windows XP extended the 32-bit format with an 8-bit alpha channel (24-bit colour plus per-pixel transparency) and was the first release to ship system icons that used it, allowing semitransparent areas like shadows, anti-aliasing, and glass-like effects to be drawn in an icon. Its shell used 48×48-pixel icons in Windows Explorer, the largest size Microsoft recommended for the release; larger images were downscaled when no closer size was available.[15]
The format could describe a 256×256 image well before Vista, but an uncompressed 32-bit image at that size needs about a quarter of a megabyte per frame (256 × 256 × 4 bytes), which made shipping such icons impractical. Windows Vista made 256×256 icons practical by adding support for storing frames in the compressed PNG format,[16] and was the first release to render and ship system icons at that size.[Notes 1] Although compression is not required, Microsoft recommends that all 32-bit color 256×256 icons in ICO files should be stored in PNG format to reduce the overall size of the file.[17] The Windows Vista Explorer supports smoothly scaling icons to non-standard sizes which are rendered on the fly even if an image is not present for that size in the icon file. The Windows Vista shell adds a slider for "zooming" the icon sizes in and out. With users using higher resolutions and high DPI modes, larger icon formats (such as 256×256) are recommended. Windows Vista and later versions also dropped the ability to display icons stored in 16-bit (New Executable) modules.[18]
The color depth of cursors trailed that of icons. On the 16-bit Windows 3.x line, cursors stayed monochrome (1 bpp) even after icons had moved to 16 colours (4 bpp) in Windows 3.0. Colour cursors first appeared on the NT 3.x line, which shipped 4 bpp cursors, and reached the consumer line with Windows 95. 32-bit cursors did not appear until Windows Vista.[citation needed] Cursors that invert the screen pixels beneath them have continued to include a monochrome (1 bpp) frame, the only way to produce that effect (described below).[citation needed]
The pixel size of cursors stayed fixed at 32×32 on standard-DPI systems throughout the 9x and NT eras, up to Windows Vista. Through Windows XP, Windows only switched between two fixed DPI presets — the "normal" and "large fonts" settings (96 and 120 DPI) — rather than scaling continuously.[citation needed] At the high-DPI preset, XP already doubled the nominal cursor size (SM_CXCURSOR/SM_CYCURSOR) to 64×64 so the pointer would not become too small to use, and Microsoft recommended authoring cursor sets with both 32×32 and 64×64 images for such systems — though the cursors XP itself shipped contained only 32×32.[19] Windows Vista was the first release to scale icon sizes continuously with the display DPI.[citation needed] From Windows 7, the cursors shipped with Windows began carrying several sizes in a single file for the same reason — adding a 48×48 tier alongside the existing 32×32. Windows 8.1 added a 64×64 tier and per-monitor DPI awareness, letting windows on different displays use different scale factors,[citation needed] and from Windows 10 cursors also shipped in a larger five-size set.[citation needed] The system selects among these sizes by display scaling (see Default sizes and DPI scaling for the exact set).
Icon size and color-depth timeline
[edit]The standard color depths and pixel sizes shipped in system icons changed over successive releases, as summarized below.[citation needed]
| Release | Color depths (bpp) | Standard sizes (px) | Notes |
|---|---|---|---|
| Windows 1.x–2.x | 1 | 64 (icons), 32 (cursors) | Raw single image, no directory |
| Windows 3.x / NT 3.x | 1, 4 | 32 | ICONDIR + DIB introduced; 1 bpp + 4 bpp paired |
| Windows 95 | 4 | 16, 32 | Higher depths supported by the shell but rarely shipped; 16 px is the small (taskbar/notification-area) icon size |
| Windows NT 4.0 / 98 / Me / 2000 | 4, 8 | 16, 32, 48 | 8 bpp and 48 px introduced in NT 4.0; became common by 98/Me[7] |
| Windows XP | 4, 8, 32 | 16, 32, 48 | 32 bpp with alpha channel introduced |
| Windows Vista / 7 | 4, 8, 32 | 16, 32, 48, 256 | 256 px added, stored as PNG |
| Windows 8 / 8.1 | 4, 8, 32 | 16, 20, 24, 32, 40, 48, 64, 256 | Eight-size ladder completed |
| Windows 10 / 11 | 32 | 16, 20, 24, 32, 40, 48, 64, 256 | Shipped icons are 32 bpp only |
MIME type
[edit]While the IANA-registered MIME type for ICO files is image/vnd.microsoft.icon,[20] it was submitted to IANA in 2003 by a third party and is not recognised by Microsoft software, which uses image/x-icon or image/ico instead.[21][22] Erroneous types image/ico, image/icon, text/ico and application/ico have also been seen in use.
File structure
[edit]An ICO or CUR file is made up of an ICONDIR ("Icon directory") structure, containing an ICONDIRENTRY structure for each image in the file, followed by a contiguous block of all image data. Each image is stored either as a raw DIB (see DIB format) or as a complete PNG file (see PNG format).[9] It is customary practice to store the image data in the same order as the entries in the image directory.
All values in ICO/CUR files are represented in little-endian byte order.
ICONDIR structure
[edit]| Offset (bytes) | Field | Size (bytes) | Description |
|---|---|---|---|
| 0 | idReserved | 2 | Reserved. Must be 0. |
| 2 | idType | 2 | Image type: 1 for ICO image, 2 for CUR image. Other values are invalid. |
| 4 | idCount | 2 | Number of images in the file. |
| 6 | idEntries | idCount * 16 | ICONDIRENTRY array. Each entry represents an image. |
ICONDIRENTRY structure
[edit]| Offset (bytes) | Field | Size (bytes) | Description |
|---|---|---|---|
| 0 | bWidth | 1 | Image width in pixels. Can be any number between 0 and 255. 0 means width is 256.[Notes 1] |
| 1 | bHeight | 1 | Image height in pixels. Can be any number between 0 and 255. 0 means height is 256.[Notes 1] |
| 2 | bColorCount | 1 | Number of colors in the color palette. For paletted depths: 2 for 1 bpp, 16 for 4 bpp; 0 for 8 bpp and above. An incorrect value affects image selection scoring for icons. |
| 3 | bReserved | 1 | Reserved. Must be 0. |
| 4 | wPlanes | 2 | |
| 6 | wBitCount | 2 | |
| 8 | dwBytesInRes | 4 | Image data size in bytes. |
| 12 | dwImageOffset | 4 | Specifies the offset of the DIB or PNG data from the beginning of the ICO/CUR file. |
DIB format
[edit]DIB frames are stored as raw DIB (.bmp) data: a BITMAPINFOHEADER followed by the pixel data and a 1-bit AND mask, without the BITMAPFILEHEADER that precedes DIB data in a standalone .bmp file. Frames should use the standard 40-byte BITMAPINFOHEADER (biSize = 40); the extended BITMAPV4HEADER (108 bytes) and BITMAPV5HEADER (124 bytes) are not accepted.[citation needed]
The height declared in the BITMAPINFOHEADER is twice the height declared in the image directory, because the DIB holds two stacked parts of equal dimensions: the colour image (the XOR mask) above the 1-bit AND mask.[9][8] Rows in both parts are padded to a multiple of four bytes.
The AND mask is one bit per pixel regardless of the image's colour depth: a 0 bit draws the corresponding image pixel, while a 1 bit leaves the screen unchanged, making the pixel transparent.
The colour image is conventionally stored at 1, 4, 8 or 32 bits per pixel, the depths authoring tools produce; 16- and 24-bit frames are also loaded by Windows, described below.
A 1-bit (monochrome) frame carries a two-entry colour table: index 0 is black (#00000000) and index 1 is white (#00FFFFFF). This format dates to the monochrome displays for which icons and cursors were originally designed, where the result was computed as Output = (Existing AND Mask) XOR Image.[23][8] The AND and XOR bits combine to give four pixel types:
| AND bit | XOR bit | Pixel type |
|---|---|---|
| 1 | 0 | Transparent (screen pixel unchanged) |
| 1 | 1 | Inverted (screen pixel colour inverted) |
| 0 | 1 | White |
| 0 | 0 | Black |
On colour frames the XOR step draws from the colour bitmap instead of a 1-bit image, so transparency is carried by the AND mask alone.
4- and 8-bit frames are paletted: a colour table of 4-byte BGRA entries (16 and 256 entries respectively) follows the header, and each pixel is an index into it.[24]
16- and 24-bit frames store their pixels directly — 16-bit as a two-byte RGB value, 24-bit as BGR triples[25] — with no colour table and no alpha channel, so transparency comes only from the AND mask. Neither is produced by mainstream authoring tools, and both are rarely encountered.[citation needed] Windows loads both and promotes them to 32 bpp; Microsoft additionally lists 24-bit outside the supported colour formats, recommending conversion to 0RGB 32-bit beforehand.[26]
32-bit frames store BGRA quads and use straight (non-premultiplied) alpha — R, G and B are full-intensity values not multiplied by the alpha. When every alpha byte is zero the frame is treated as fully opaque 0RGB (supported since Windows 9x); when any alpha byte is non-zero the frame uses 8-bit per-pixel alpha compositing (supported since Windows XP).[27] The AND mask should still be correct, with its bit set to 1 wherever the alpha is zero. A mask left entirely zero renders correctly under alpha blending but produces wrong results wherever the 1-bit mask is used directly, such as monochrome rendering or compositing drag images and drop-shadow silhouettes.
PNG format
[edit]A PNG frame is a complete PNG file embedded verbatim, with no BITMAPINFOHEADER, no doubled height, and no AND mask. Windows recognises it by the PNG file signature at the start of the image data; any other leading bytes are interpreted as a BITMAPINFOHEADER-prefixed DIB frame. The PNG is stored raw rather than wrapped in a DIB with biCompression = BI_PNG, because icon editors of the era crashed on the unrecognised compression value, whereas a raw signature made those parsers fail early and safely.[16]
The image data is conventionally 32-bit RGBA, the format authoring tools produce, although current versions of Windows also load paletted, 24-bit RGB and grayscale PNGs.[citation needed] Dimensions and color depth are taken directly from the PNG data, and Windows derives the AND mask automatically from the alpha channel, so none need be supplied.[16]
A PNG frame can be stored at any size, but compression is conventionally applied only to the 256×256 frame; because PNG frames are unreadable on pre-Vista Windows, keeping the smaller frames as uncompressed DIB preserves down-level compatibility.[28]
Image selection
[edit]When Windows loads an ICO or CUR file with multiple images, it scores each candidate entry and picks the one with the lowest score. The target size comes from the system metrics (see below) and the target color depth is that of the primary monitor, since no API supplies an explicit depth.[19] The score combines a size component and a color depth component:
widthScore = |entry width − target width| × (2 if entry is narrower than target, else 1) heightScore = |entry height − target height| × (2 if entry is shorter than target, else 1) bppScore = |entry bpp − target bpp| × 2 totalScore = widthScore + heightScore + bppScore
Images smaller than the requested size are penalized with a ×2 multiplier.[19] An entry that scores 0 is an exact match on size and color depth. When two entries have the same score, the one with higher color depth wins. A bWidth or bHeight value of 0 in ICONDIRENTRY is interpreted as 256 for scoring purposes. Because these fields are one byte each, they cannot represent sizes above 256, and the size used for scoring is taken from these directory fields rather than from the embedded image.
For icons, a non-zero bColorCount gives the size of the color palette, and Windows derives the color depth as the number of bits needed to represent that many colors — so 2 colors map to 1 bpp, 4 to 2 bpp, 8 to 3 bpp, and 16 to 4 bpp; if bColorCount is 0, wBitCount is used directly instead. Cursors have no equivalent field to read: in the cursor form of ICONDIRENTRY, bColorCount is unused and wBitCount instead holds the hotspot's vertical coordinate (see above). Through Windows Vista, this meant cursor candidates differing only by color depth could not be distinguished during scoring.[Notes 3] From Windows 7 onward, the color depth for cursor scoring is instead read from the cursor's own image data.[citation needed]
Earlier versions of Windows further penalized color compression by doubling the color-depth delta a second time; Windows XP dropped this extra penalty so that a 32-bpp icon can be chosen over an 8-bpp one on a 24-bpp display, which the alpha-blended XP user interface relies on.[19]
Although the scoring algorithm is independent of the order in which images are stored, Windows-shipped files follow a consistent convention: modern single-depth icons and cursors store the largest image first, while legacy files containing multiple colour depths group their entries in ascending order of colour depth (4-bit, then 8-bit, then 32-bit).[citation needed] Third-party icon editors apply the same ascending-depth ordering.[29] The order matters only when two images tie on both score and colour depth: the one stored first is then kept. This is most likely when no specific size is requested.[citation needed]
Default sizes and DPI scaling
[edit]Windows exposes the nominal icon and cursor sizes through the Win32 GetSystemMetrics function.[30] SM_CXICON/SM_CYICON report the default icon size; SM_CXSMICON/SM_CYSMICON report the small icon size. SM_CXCURSOR/SM_CYCURSOR report the nominal cursor size. These values are used as the default target dimensions when loading an image without an explicit size.[31]
On current versions of Windows (Windows 10 and later), higher DPI settings make Windows request larger images. Both icons and cursors are always square. Icon sizes scale linearly with DPI; cursor sizes are rounded to a fixed set of five discrete slots. When no image at the exact target size is available, Windows applies the scoring algorithm above to select the nearest candidate and scales it to the target size.
| DPI range | 96–143 | 144–191 | 192–287 | 288–383 | ≥ 384 |
|---|---|---|---|---|---|
| Scale range | 100%–149% | 150%–199% | 200%–299% | 300%–399% | ≥ 400% |
| SM_CXICON | 32–128 px | ||||
| SM_CXSMICON | 16–64 px | ||||
| SM_CXCURSOR | 32 px | 48 px | 64 px | 96 px | 128 px |
The SM_CXCURSOR values above assume the default cursor size setting (pointer size = 1 in Windows Settings). The cursor size slider scales all five slots proportionally: at pointer size 2 all values double, at size 3 they triple, and so on. SM_CXICON and SM_CXSMICON are not affected by the cursor size setting.
Icon and cursor resources
[edit]Icons and cursors in Portable Executable (EXE or DLL) files are organised in resources of type RT_GROUP_ICON (14), RT_GROUP_CURSOR (12), RT_ICON (3) and RT_CURSOR (1).[32]
The icon a module presents to Windows File Explorer is the alphabetically first named icon group, or, if none are named, the group with the numerically lowest resource identifier.[9]
RT_GROUP_ICON and RT_GROUP_CURSOR resources contain one NEWHEADER structure and one or more RESDIR structures, which have almost the same layout as ICONDIR and ICONDIRENTRY in ICO/CUR files. The key difference is that the last field of RESDIR holds a two-byte resource identifier of the corresponding RT_ICON or RT_CURSOR resource rather than a file offset.
| Offset (bytes) | Field | Size (bytes) | Description[33] |
|---|---|---|---|
| 0 | Reserved | 2 | Reserved. Must be 0. |
| 2 | ResType | 2 | Resource type: 1 for icon, 2 for cursor. Other values are invalid. |
| 4 | ResCount | 2 | Number of RESDIR structures that immediately follow this structure. |
| Offset (bytes) | Field | Size (bytes) | Description[34] |
|---|---|---|---|
| 0 | ResInfo | 4 | |
| 4 | Planes | 2 | Color planes. Should be 0 or 1.[Notes 2] |
| 6 | BitCount | 2 | Bits per pixel.[Notes 4] |
| 8 | BytesInRes | 4 | Image data size in bytes. |
| 12 | IconCursorId | 2 | Ordinal identifier of the RT_ICON or RT_CURSOR resource. |
RT_ICON and RT_CURSOR resources have the same image data format as in ICO files and can store PNG images as well.[37] The first four bytes of an RT_CURSOR resource contain the cursor hotspot as two WORD values (x, y);[38][37] BytesInRes in the corresponding RESDIR includes these four bytes (in contrast to CUR files, in which the hotspot is stored in the ICONDIRENTRY structure and not counted in dwBytesInRes).
Icon library
[edit]An icon library is a way to package Windows icons; it is typically a 32-bit Portable Executable binary file having an .ICL extension, with icon resources being the packaged icons. Unlike an ordinary EXE or DLL, an ICL file conventionally contains only icon resources, with no cursors or other resource types.[39] As in an ordinary DLL, each icon in the library is identified by a numeric (0–32767) or named resource identifier together with a language code, and this identifier/language-code pair must be unique within the file.[39] An ICL file may also carry an optional, non-standardized block of user-friendly icon names.[39] A legacy 16-bit New Executable variant of the format dates to Windows 3.11 and is no longer generally supported;[39] Windows Vista and later dropped the ability to display icons from such 16-bit libraries (see History).
See also
[edit]Notes
[edit]- 1 2 3 4 5 6 7 Since Windows 95 size of an image in the ICONDIRENTRY structure might be set to zero, which means 256 pixels.[8] Since Windows Vista, the size of an image is determined from the BITMAPINFOHEADER structure or PNG image data which technically allows storing icons with larger than 256 pixels, but such larger sizes are not recommended by Microsoft.
- 1 2 Setting the color planes to 0 or 1 is treated equivalently by the operating system, but if the color planes are set higher than 1, this value should be multiplied by the bits per pixel to determine the final color depth of the image. It is unknown if the various Windows operating system versions are resilient to different color plane values.
- 1 2 3 "Windows XP icon and cursor support". Microsoft. November 18, 2005. Archived from the original on 2011-06-30. Retrieved 2023-07-03.
The cursor is loaded properly at whatever color depth the cursor was authored. However, the system cannot distinguish between multiple candidates in the same cursor file or resource that differ only by their color depths. Icons, however, fully support multiple icon candidates with varying color depths.
- 1 2 The bits per pixel might be set to zero, but can be inferred from the other data; specifically, if the bitmap is not PNG compressed, then the bits per pixel can be calculated based on the length of the bitmap data relative to the size of the image. If the bitmap is PNG compressed, the bits per pixel are stored within the PNG data. It is unknown if the various Windows operating system versions contain logic to infer the bit depth for all possibilities if this value is set to zero.
- 1 2 Also referred to as GRPICONDIR and GRPICONDIRENTRY respectively in some sources.Chen, Raymond (July 20, 2012). "The format of icon resources". The Old New Thing. Retrieved 2023-05-20.
References
[edit]- ↑ "MIME Sniffing Standard". WHATWG. January 17, 2014. Archived from the original on 2014-03-27. Retrieved 2014-04-18.
- ↑ "CUR File Format". Aspose. Retrieved 2026-07-12.
Essentially, CUR files are stationary images similar to ICO (icon) files but with distinct extensions. Both formats are based on the Device-Independent Bitmap (DIB) specification.
- ↑ "CSS Basic User Interface Module Level 3 (CSS3 UI)". W3C. Retrieved 2026-07-12.
At the time of writing this specification (spring 2015), the only file formats supported for cursors in common desktop browsers are the .ico and .cur file formats, as designed by Microsoft. For compatibility with legacy content, UAs are encouraged to support these, even though the lack of an open specification makes it impossible to have a normative requirement about these formats.
- ↑ "Custom cursor: Blank .cur file seen as black box". Chromium Issue Tracker. January 3, 2010. Retrieved 2026-07-12.
It is simply not possible to do this with .cur files in chrome - inversion pixels show as transparent.
- ↑ Fekete, Gyorgy (March 11, 2009). "Operating System Interface Design Between 1981-2009". Webdesigner Depot. Retrieved 2011-06-06.
- 1 2 "Icon Editor". Microsoft Windows Software Development Kit: Programmer's Utility Guide (Version 1.03 ed.). Microsoft Corporation. 1986. §7.14 "Icon Display", p. 134. Document Number 050051051-103-I01-1086.
- 1 2 3 4 Edwards, Benj (June 21, 2021). "A Visual History of Windows Icons: From Windows 1 to 11". How-To Geek. Retrieved 2026-07-27.
- 1 2 3 4 Chen, Raymond (October 18, 2010). "The evolution of the ICO file format, part 1: Monochrome beginnings". The Old New Thing. Retrieved 2022-11-27.
- 1 2 3 4 5 6 7 Hornick, John (September 29, 1995). "Icons". Windows User Interface Technical Articles (MSDN). Microsoft Corporation. Retrieved 2011-06-05.
- ↑ "Windows 95 Architecture Components". Microsoft TechNet. Microsoft Corporation. Retrieved 2011-06-06.
- ↑ "Shell Icon BPP". Windows 2000 Registry Reference. Microsoft Corporation. Retrieved 2011-06-06.
- 1 2 "Design of Graphic Images". The Windows Interface Guidelines for Software Design. Microsoft Corporation. Retrieved 2026-07-30.
- ↑ "To use high color icons". Windows 2000 Resource Kit. Microsoft Corporation. Retrieved 2026-08-03.
- ↑ "ShellIconSize". Windows 2000 Registry Reference. Microsoft Corporation. Retrieved 2026-08-03.
- ↑ "Creating Windows XP Icons". Windows XP Technical Articles (MSDN). Microsoft Corporation. July 2001. Retrieved 2022-11-27.
- 1 2 3 Chen, Raymond (October 22, 2010). "The evolution of the ICO file format, part 4: PNG images". The Old New Thing. Retrieved 2022-11-27.
- ↑ "Icons (Design basics) - Win32 apps". Microsoft Learn. 9 February 2021.
Icons have a maximum size of 256x256 pixels, making them suitable for high-dpi (dots per inch) displays. These high-resolution icons allow for high visual quality in list views with large icons... Only a 32-bit copy of the 256x256 pixel image should be included, and only the 256x256 pixel image should be compressed to keep the file size down.
- ↑ Chen, Raymond (May 2008). "Windows Confidential - 16-Bit Icons Are So Passé". TechNet Magazine. Retrieved 2022-11-27.
- 1 2 3 4 "Windows XP icon and cursor support". Microsoft. November 18, 2005. Archived from the original on 2011-06-30. Retrieved 2026-07-31.
- ↑ Butcher, Simon (3 Sep 2003). "image/vnd.microsoft.icon". IANA. Retrieved 2014-01-03.
- ↑ Lawrence, Eric (11 Feb 2011). "IE9 RC Minor Changes List". IEInternals. MSDN Blogs. Retrieved 2016-08-20.
We use "image/x-icon" because that's the MIME type we've always used. Someone at some point (AFAIK, not related to Microsoft) proposed registration of the MIME type as "vnd.microsoft.icon", but Windows doesn't actually use that, it uses image/x-icon.
See the second comment. - ↑ "Windows Imaging Component - ICO Format Overview". Microsoft Learn.
- ↑ Heckel, Paul (1992). "Debunking the Software Patent Myths". MIT CSAIL.
- ↑ "SAMPLE: DIBs and Their Uses". Microsoft Knowledge Base. Microsoft Corporation. Archived from the original on 2010-12-24. Retrieved 2026-08-03.
- ↑ "SAMPLE: 16 and 32 Bits-Per-Pel Bitmap Formats". Microsoft Knowledge Base. Microsoft Corporation. Archived from the original on 2012-11-08. Retrieved 2026-08-03.
- ↑ Chen, Raymond (October 19, 2010). "The evolution of the ICO file format, part 2: Now in color!". The Old New Thing. Retrieved 2022-11-27.
- ↑ Chen, Raymond (October 21, 2010). "The evolution of the ICO file format, part 3: Alpha-blended images". The Old New Thing. Retrieved 2022-11-27.
- ↑ "Vista icon format". RealWorld Icon Editor. Retrieved 2026-07-29.
- ↑ "Creating icons with GIF Movie Gear". Gamani. Gamani Productions. Retrieved 2026-07-30.
- ↑ "GetSystemMetrics function". Microsoft Learn.
- ↑ Chen, Raymond (August 19, 2021). "What is the deal with the SM_CXCURSOR system metric?". The Old New Thing. Retrieved 2026-07-27.
- ↑ "Resource File Formats - Win32 apps". Microsoft Learn. 2020-08-19. Retrieved 2023-05-22.
- ↑ "NEWHEADER structure". Microsoft Learn. Microsoft.
- ↑ "RESDIR structure". Microsoft Learn. Microsoft.
- ↑ "ICONRESDIR structure". Microsoft Learn. Microsoft.
- ↑ "CURSORDIR structure". Microsoft Learn. Microsoft.
- 1 2 Chen, Raymond (October 25, 2023). "The format of icon resources, revisited". The Old New Thing. Retrieved 2026-07-30.
- ↑ "LOCALHEADER structure - Win32 apps". Microsoft Learn. 2020-12-11. Retrieved 2023-05-22.
- 1 2 3 4 "Icon Library (.icl)". RealWorld Icon Editor. Retrieved 2026-07-29.