给定应用程序的完整路径或 NSBundle 实例,您如何获取其图标?
Given the full path or an NSBundle instance of an application, how do you get its icon?
如果我有应用程序包的完整路径或该应用程序的 NSBundle
实例,我如何获得该应用程序图标的 NSImage
表示?
具体来说,我想获得适用于一组特定维度的最佳可用图标版本。例如,如果应用程序图标的可用版本包括尺寸 32x32、64x64 和 128x128 点,如果我请求一个 96x96 点的版本,我将获得 128x128 版本。
这将需要在 Retina 和非 Retina 显示器上工作,因此生成的 NSImage
将必须包括图标的 Retina 和非 Retina 表示。
我找到了 NSWorkspace
的 iconForFile:
方法,但不幸的是它只返回一个 32x32 像素的图标,所以这对我的目的没有用。
我还可以从其信息字典中读取包的 CFBundleIconFile
和 CFBundleIconName
键,然后从其 icns 文件或资产目录中提取正确的图像,但这似乎很多工作。我不确定从哪里开始从这两种文件类型中获取图像。我希望有更简单的方法!
我错了 iconForFile:
。虽然 NSImage it returns 确实报告其大小为 32x32,但它包含该应用程序的所有各种图标大小的图像表示,包括更大的图标。选择我想要的,或者使用bestRepresentationForRect:context:hints:
方法,都是一件简单的事情。
如果我有应用程序包的完整路径或该应用程序的 NSBundle
实例,我如何获得该应用程序图标的 NSImage
表示?
具体来说,我想获得适用于一组特定维度的最佳可用图标版本。例如,如果应用程序图标的可用版本包括尺寸 32x32、64x64 和 128x128 点,如果我请求一个 96x96 点的版本,我将获得 128x128 版本。
这将需要在 Retina 和非 Retina 显示器上工作,因此生成的 NSImage
将必须包括图标的 Retina 和非 Retina 表示。
我找到了 NSWorkspace
的 iconForFile:
方法,但不幸的是它只返回一个 32x32 像素的图标,所以这对我的目的没有用。
我还可以从其信息字典中读取包的 CFBundleIconFile
和 CFBundleIconName
键,然后从其 icns 文件或资产目录中提取正确的图像,但这似乎很多工作。我不确定从哪里开始从这两种文件类型中获取图像。我希望有更简单的方法!
我错了 iconForFile:
。虽然 NSImage it returns 确实报告其大小为 32x32,但它包含该应用程序的所有各种图标大小的图像表示,包括更大的图标。选择我想要的,或者使用bestRepresentationForRect:context:hints:
方法,都是一件简单的事情。