【发布时间】:2011-03-20 18:07:50
【问题描述】:
有人可以解释一下,为什么许多程序的图标路径都是这样的: /usr/share/program/icons/hicolor/16x16/...
我不明白为什么是 hicolor 以及为什么是 16x16、32x32 等。
是否有任何功能(例如在 GTK 中)可以自动从此类路径中获取正确的图标?
谢谢!
【问题讨论】:
有人可以解释一下,为什么许多程序的图标路径都是这样的: /usr/share/program/icons/hicolor/16x16/...
我不明白为什么是 hicolor 以及为什么是 16x16、32x32 等。
是否有任何功能(例如在 GTK 中)可以自动从此类路径中获取正确的图标?
谢谢!
【问题讨论】:
术语“hicolor”是标准图标集的名称,它是所有其他图标集的后备,这意味着,如果在当前图标集中找不到应用程序的图标(例如/usr/share/icons/oxygen),hicolor接下来搜索目录。
16x16, 32x32 表示图像的大小,存储在该目录中,因为图标存储为简单的 PNG 文件,其中包含完全 一个 图像(不像,例如 mac 上的 .icns) .
【讨论】:
这些图标路径由Icon Theme Specification 标准化。原因是所有应用程序都可以将其默认图标安装到hicolor 主题中(这是默认主题,这意味着如果另一个主题中缺少图标,则将使用hicolor 中的版本。)
此外,程序可以请求与提供的图标大小不同的图标大小,例如 37x37,系统将选择最合适的可用大小(如 32x32)并将其缩放到请求的大小。
如果有人想要覆盖应用程序的图标,例如为视力不佳的用户制作高对比度的黑白版本,那么他们所要做的就是制作一个同名的图标并将其放入在高对比度的黑白主题中,它将覆盖hicolor 图标。
您询问的功能也存在。在 GTK 中,有些函数采用const gchar *icon_name 参数,例如gtk_image_new_from_icon_name()。这些将使用您从当前主题中提供的名称加载图标,如果当前主题中不存在该图标,则从 hicolor 主题中加载。
【讨论】:
如果问题不是 “为什么 'hicolor'?” 就像其他人回答的那样,而是 “为什么将文件系统用作树状数据库?” 答案是大多数 unix 文件系统(所有旧文件系统)在遍历目录中有超过 1000 个条目的路径时都会陷入困境。
因为这些文件系统中的目录必须以线性方式进行搜索。
一些更现代的文件系统支持 O(log N) 搜索并且可以有效地处理更高的计数。
【讨论】: