我的Windows应用程序图标应包含哪些尺寸的图标?

252

我有一个Windows应用程序,可以在Windows XP及更高版本(即Vista/7)中运行。根据Vista UI Guidelines,标准尺寸为16x16、32x32、48x48、256x256(XP标准尺寸不包括256x256图标)。除了这些尺寸,我还有96x96和128x128(也可以创建更多)。

我应该包括哪些图标尺寸?操作系统是否会实际使用“非标准”尺寸,还是只会使我的应用程序变得臃肿?


3
这个网站是一个众多平台图标尺寸的很好的参考资料:http://iconhandbook.co.uk/reference/chart/ - Mark Hatton
9个回答

315

我花了一些时间详细检查了它。我创建了一个图标,其中的图像大小为16、24、32、40、48、64、96、128和256。然后我检查了显示哪个图像。所有这些都是在正常的96dpi下完成的。如果使用更大的DPI,则可能会使用更大的尺寸(只在Windows 7中进行了少量检查)。结果如下:

Windows XP:

  • 资源管理器视图:
    • 详细信息/列表:16
    • 图标:32
    • 平铺/缩略图:48
  • 右键单击->属性/选择新图标:32
  • 快速启动区:16
  • 桌面:32

Windows 7:

  • 资源管理器视图:
    • 详细信息/列表/小符号:16
    • 所有其他选项:256(如果需要,将调整大小)
  • 右键单击->属性/选择新图标:32
  • 固定到任务栏:32
    • 右键菜单:16
  • 桌面:
    • 小符号:32
    • 中等符号:48
    • 大符号:256(如果需要,将调整大小)
    • 使用Ctrl+鼠标滚轮进行缩放:16、32、48、256

Windows Runtime: (来自此处)

  • 主磁贴:150x150,310x150(宽版)
  • 小徽标:30x30
  • 标记(用于锁屏):24x24,单色
  • 启动画面: 620x300
  • 应用商店: 50x50
  • 因此,Windows XP使用16、32、48大小的图标,而Windows 7(以及可能也包括Vista)还使用256大小的图标。所有其他中间图标大小都不被使用(它们可能在我没有检查的某个区域中使用)。


    我还在Windows 7中检查了如果图标大小缺失会发生什么:

    缺失的尺寸会被生成(显然)。对于大小为16、32和48的图标,如果其中一个尺寸缺失,则进行降采样。因此,如果我们有尺寸为16和48的图标,则32大小的图标是从48大小的图标创建的。只有在没有其他可用的尺寸时,才会使用256图标!因此,如果图标的尺寸为16和256,则其他大小从16图标放大得到!

    此外,如果256图标不存在,则使用(可能生成的)48图标,但不再调整大小。因此,我们有一个(可能很大的)空白区域,在中间放置48图标。

    请注意,XP中默认的桌面图标大小为32x32,而在Windows 7中为48x48。因此,对于Windows 7,拥有48大小的图标相对重要。否则,它将从较小的图标进行放大,可能看起来相当丑陋。


    关于Windows XP兼容性的说明:如果您将图标作为窗口图标重新使用,则请注意,如果使用压缩的256图标,则可能会导致应用程序崩溃。解决方法是不压缩图标或创建一个没有(压缩的)256图标的副本。更多信息请参见此处


    12
    这里提到需要使用64像素大小的图标,在官方图标指南中还推荐使用20像素、24像素和40像素大小的图标。40像素大小的图标似乎用于alt+tab和气球提示,其他图标则根据DPI而定(例如在高DPI屏幕上使用20像素代替16像素,否则从更大的32像素图标缩小,可能会看起来更丑)。我没有进行过测试。 - Camilo Martin
    2
    我进行了更多的测试。在Windows 7上,当我将显示设置为144dpi(“150%”)时,对于最小可能的图标,它使用了24px图标(如果有的话,否则是uprezzed 16px)。从图标指南中可以看出,在Vista上有一个“经典模式”,它也使用64px图标。然而,Windows 7不使用它。相反,只调整256px图标的大小。 - Daniel Rose
    3
    如果应用程序是实用程序、不太受欢迎或者比较老旧,那么它的图标往往会有一半的时间缺失。甚至连 Visual Studio 的某些图标(例如文件类型)都没有 48 像素版本。 - Camilo Martin
    另外一个SO的答案提到了一个名为IcoFX的应用程序--它是一个完整的图形编辑器,但具有轻松打开图像并将其保存在所有上述“推荐”大小和位深度中的功能。(这是共享软件,有30天的完整试用期。) - a paid nerd
    2
    Windows 10 的更新会很棒。在 96 DPI 下,图标似乎是 24x24 的,但 Windows 10 也支持更高的 DPI 设置。 - Drew Noakes
    显示剩余5条评论

    30

    在Windows 7上,使用8、16、20、24、32、40、48、64、96、128和256像素(PNG格式的256)的图标进行了一些测试:

    • 在100%分辨率下:资源管理器使用16、40、48和256。Windows照片查看器使用96。画图使用256。
    • 在125%分辨率下:资源管理器使用20、40和256。Windows照片查看器使用96。画图使用256。
    • 在150%分辨率下:资源管理器使用24、48和256。Windows照片查看器使用96。画图使用256。
    • 在200%分辨率下:资源管理器使用40、64、96和256。Windows照片查看器使用128。画图使用256。

    因此,从Windows 7开始,你的图标应至少提供16、48和256像素。为了支持更高分辨率的新屏幕,你应该提供16、20、24、40、48、64、96和256像素。对于Windows 7,所有图片都可以使用PNG压缩,但为了向后兼容Windows XP,16到48像素的图片不应被压缩。


    请查看我在这里的答案(https://dev59.com/CWct5IYBdhLWcg3wD5WU#19984844),但是如果您压缩.ico文件中的256x256图像... Windows XP系统将无法打开该文件。您将收到HRESULT 0x88982F07的FileFormatException。 - cplotts
    1
    值得一提的是,这些高DPI版本必须以24bpp模式保存,我曾尝试将它们存储在8位色彩模式中,但Windows 7使用了256px版本而不是125% DPI下的20x20px版本。 - Bartosz Wójcik
    2
    这很简单,但非常详尽。考虑DPI非常重要。 - caesay

    24

    Microsoft UX图标指南指出:

    "应用程序图标和控制面板项目:完整集包括16x16、32x32、48x48和256x256(代码可在32到256之间缩放)"

    对我来说,这意味着(不幸的是没有明确说明),您应该提供这4种尺寸的图标。

    关于颜色格式的其他详细信息,您可能也会发现有用:

    • "图标文件还需要8位和4位调色板版本,以支持远程桌面中的默认设置。"

    • "仅应包含256x256像素图像的32位副本,并且只应将256x256像素图像压缩[为PNG]以减小文件大小。"


    16

    对于 Windows 10,实际上这并不完全准确,事实上 stackoverflow 上的任何答案都不是,我在尝试将像素艺术作为图标使用时发现了这一点,它在不应该被缩放的情况下被重新调整了大小(由于 Windows 的插值和平滑处理,这很容易看出来),即使我使用了这篇帖子中的大小。

    因此,我制作了一个应用程序,并在所有 DPI 设置上完成了所有工作,您可以在这里查看:
    Windows 10 所有 DPI 设置下的所有图标分辨率
    您还可以使用我的应用程序创建图标,同时关闭最近邻插值和平滑处理,这是任何我见过的糟糕编辑器都没有做到的。

    如果您只想要这些分辨率:
    16、20、24、28、30、31、32、40、42、47、48、56、60、63、84、256
    您应该使用所有 PNG 图标,并且除此之外放置的任何内容都不会显示。请参见我的 帖子


    抱歉,你是指64吗?你的帖子中提到了84,这在其他地方没有提到,但没有提到似乎是默认大小之一的64。 - user4551

    12

    该页面中没有尺寸列表。 - huang

    8

    不要使用96x96,改用64x64。我通常使用以下尺寸:

    • 16 - 状态/标题栏按钮
    • 32 - 桌面图标
    • 48 - 文件夹视图
    • 64/128 - 额外的尺寸

    在XP上256也可以使用,但是旧的资源编译器有时会出现“内存不足”错误。


    我看到你之前处理过Java。我该如何使用Java实现这样的行为?问题是在系统任务栏中显示的图标比标题栏中的图标要大得多,而且它们无法被系统正确地调整大小。我能做的最多就是*stage.getIcons().add(image);*,但它不会让我指定大小和位置,例如任务栏、文件夹视图或其他任何位置。我正在使用JavaFX 8。 - homerun
    1
    @someFolk Java编译成“class”文件或“jar”文件(这是类文件+清单的zip文件)。换句话说,它不会编译为PE(Windows可执行文件)。但是,有一些工具可以为您构建包装器 - 基本上是包含jar作为资源的小程序(当运行程序时,该资源被提取并运行)。此处的答案提到了其中一些工具。这意味着您的问题取决于您使用的程序。但是,有一些用于编辑资源的工具(例如:Resource Hacker)。 - Christian

    8

    这份微软官方指南 表示:

    应用程序至少应该有以下尺寸:16x16、24x24、32x32、48x48 和 256x256。

    以下是一些程序及其ICO文件中包含的尺寸列表:

    应用程序 图标 16 20 24 32 40 48 60 64 72 80 96 256
    Google Chrome 106
    IntelliJ IDEA 2022.2.3
    MS PowerToys 0.63.0
    MS Paint 11.2208.6.0
    MS Task Manager 10.0
    MS Word 2021
    MS Visual Studio 2022
    我们可以使用ImageMagick从PNG等文件创建各种尺寸的ICO文件,方法如下:

    ./magick my-source-image.png -background transparent -define icon:auto-resize="16,24,32,48,64,256" C:/Users/Hello/Desktop/result.ico
    

    注释

    1. 没有应用程序包含 128 尺寸
    2. 256 尺寸是 PNG 格式;其他的是 ICO
    3. MSMicrosoft 的缩写
    4. 这些图标是从程序的 .exe 文件中提取出来的,使用this tool工具
    5. 您可以像这样使用 ImageMagick 保存上述图标并自行检查:
      ./magick identify "C:/Users/Hello/Desktop/result.ico"
      

    2
    根据Microsoft MSDN建议,应用程序图标和控制面板项目的完整集合包括16x16、32x32、48x48和256x256(代码在32到256之间缩放)。必须使用.ico文件格式。对于经典模式,完整集合是16x16、24x24、32x32、48x48和64x64。
    因此,我们已经有了以下标准推荐大小:
    - 16 x 16, - 24 x 24, - 32 x 32, - 48 x 48, - 64 x 64, - 256 x 256。
    如果我们想要支持高DPI设置,完整列表还将包括以下大小:
    - 20 x 20, - 30 x 30, - 36 x 36, - 40 x 40, - 60 x 60, - 72 x 72, - 80 x 80, - 96 x 96, - 128 x 128, - 320 x 320, - 384 x 384, - 512 x 512。

    1

    简而言之,在 Visual Studio 2019 中,当您将 Icon 资源添加到 Win32(桌面)应用程序时,您将获得一个自动生成的图标文件,其格式如下。我认为作为 Windows 的 #1 开发工具,它应该做得正确。因此,一个兼容 Windows 的应用程序应该具有以下格式:

    | Resolution | Color depth | Format |
    |:-----------|------------:|:------:|
    | 256x256    |      32-bit |  PNG   |
    | 64x64      |      32-bit |  BMP   |
    | 48x48      |      32-bit |  BMP   |
    | 32x32      |      32-bit |  BMP   |
    | 16x16      |      32-bit |  BMP   |
    | 48x48      |       8-bit |  BMP   |
    | 32x32      |       8-bit |  BMP   |
    | 16x16      |       8-bit |  BMP   |
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接