流畅兼容是 ImageJ2 最重要的目标。新版本的 ImageJ 必须仍然可以使用现有的插件和宏之一。
ImageJ 遗产
ImageJ2项目是一个完整的重新设计,不依赖于原始的ImageJ。然而,为了促进兼容,有一个 ImageJ Legacy 组件提供(来源ij1-patcher),它提供了 ImageJ2 和 ImageJ 的扩展以协调运行。
ImageJ继承层提供以下扩展:
ImageJ2 目前默认使用 ImageJ 用户界面,因为许多用户需要保留对 ImageJ 插件的访问权限。
ImageJ用户界面
ImageJ2 继承层通过 UserInterface 类实现 LegacyUI 接口,将 ImageJ 用户界面 (UI) 转换为 SciJava 兼容的 UI。
然而,由于原始 ImageJ 的设计对这些要求的考虑,事情因此变得复杂。继承层使用名为Javassist的字节码操作库在运行时重写 ImageJ 的部分内容,以促进和集成扩展。有关详细信息,请参阅on GitHub项目。
数据结构的翻译
每个§§4§§§都有一个链接的ImageDisplay,由ImagePlus保持同步。每当需要时,继承层就会同步链接的数据对象。为了保持合理的性能,我们会利用一切,通过就且仅有偶然机会(延迟地,使用磁盘)进行数据更改转换避免数据。中间层在时导入时通过平面存储引用重用数据——特别是当平面存储在基元数据库中时——但在某些情况下必须复制(例如,对于ROI)。
目前,自动同步已被禁用,因为它会对性能产生负面影响。性能问题的解决方案是imagej-ops,而不是依赖于先前的逐像素转换。
同时,可以通过设置 imagej.legacy.sync system property 来强制完全同步。这可以在正在运行的 ImageJ 实例中完成,例如通过运行以下命令作为 BeanShell script:
System.setProperty("imagej.legacy.sync", "true");
将 ImageJ 命令更新为新示例
最终目标是将所有核心 ImageJ 插件迁移到 ImageJ2 范例。许多 ImageJ 插件已经以这种方式更新;特别参见 implement a wrapping layer 和 imagej-plugins-commands 存储库。
另请参阅
- ImageJ 2010 会议的ImageJDev talk,从历史角度了解这种兼容性如何随着时间的转变而转变。