如何以编程方式获取 Eclipse 插件中常用的图像

How to programmatically get images commonly used in Eclipse Plug-ins

如果一个插件希望重新使用由其他插件定义的图像,应该寻找哪些地方。

例如,如果插件需要 'Terminate' 图标,在调试插件的某处定义,则在哪里查找。

我时不时地搜索图像,尽管将常用图像的位置列在一个地方会很有用。

一些平台插件通过 ImageDescriptors 使它们的(部分)图像可用。不幸的是,所有方式都略有不同。

平台UI - org.eclipse.ui

此插件定义图像供 public 在 ISharedImages 中使用。要获取图像描述符,请像这样查询 workbench 的图像注册表:

PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_OBJ_FILE );

IDE - org.eclipse.ui.ide

IDE 插件将更多图像添加到 workbench 图像注册表,并在 IDE.ISharedImages 中列出已注册的名称。

要获取图像描述符,还可以像这样查询 workbench 的图像注册表:

PlatformUI.getWorkbench().getSharedImages().getImage( IDE.ISharedImages.IMG_OBJ_PROJECT );

调试 - org.eclipse.ui.调试

调试插件在IDebugUIConstants中定义共享图片,图片名称常量以IMG_开头。可以通过 DebugUITools 实用程序 class.

访问它们

例如:

DebugUITools.getImageDescriptor( IDebugUIConstants.IMG_ACT_RUN );

比较 - org.eclipse.compare

比较插件直接在 CompareUI.

中为 NextPrevious 图像定义 ImageDescritpors

例如:

ImageDescriptor next = CompareUI.DESC_DTOOL_NEXT;

团队 - org.eclipse.team.ui

团队插件也使用ISharedImage接口来声明叠加图像来装饰修改过的、冲突的等资源。

图像描述符可以通过TeamImages class获得:

ImageDescriptor imageDescriptor = TeamImages.getImageDescriptor( ISharedImages.IMG_DIRTY_OVR );

JDT - org.eclipse.jdt.ui

JDT 在提供图像时与 workbench 对齐。它的 ISharedImages 接口定义了注册的名称,JavaUI.getSharedImages() 允许获取相应的图像描述符。

直接访问图像

AbstractUIPlugin 有一个静态辅助方法来获取任意插件中图像的描述符。

ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin( "the.bundle.id", "/icons/sample-image.png" );

警告:以这种方式加载图像是有风险的,一般应避免ided。图像位置不是插件的一部分 API,插件作者可能会选择删除或移动图像,这会破坏您的代码。如果您需要证明这确实发生了,请查看 this post.

如果您需要来自无法通过其 API 提供的插件的图像,您应该更愿意将该图像的副本放入您的插件中。