首先,我不是很精通Java。事实上,我正在使用 JLink/Mathematica 来做我想做的事情。
在我们的实验室中,我们正在使用 Mathematica 控制的相机为我们的实验拍照。我们想将我们的图像显示程序转换为 ImageJ。另一个程序是一个内存猪,它很慢。
根据我的研究,我可以通过编写插件、脚本或宏来实现这一点。我也觉得我写的任何东西都会安装到 ImageJ 中并由默认的 GUI 控制。
我的问题是,我可以编写一个外部程序来控制已经运行的 ImageJ 实例吗?理想情况下,事件的顺序是。
- 相机通过已经存在的脚本捕捉图像。
- 图像捕获脚本要求 ImageJ 显示捕获的图像以及默认 GUI,以便我可以访问默认工具集。
- 我可以通过默认的 GUI 做一些剖面图和直方图。
- 将图像移交给 ImageJ 的脚本已关闭,但 ImageJ 上的图像仍处于打开状态。
我已成功导入 ImageJ 的 ij 类并使用它。这是我在 ImageJ 中创建图片的尝试。它在 Mathematica 的 JLink 中,但可以很好地翻译成 Java。
Needs["JLink`"];
InstallJava[];
AddToClassPath["C:\\Program Files\\ImageJ\\ij.jar"];
ijClass = LoadJavaClass["ij.IJ"];
imagePlusClass = LoadJavaClass["ij.ImagePlus"];
JavaNew[imagePlusClass, "My New Image",
JavaNew["ij.process.ByteProcessor", 400, 400]]@show[]
ij`IJ`log["test"];
ij`IJ`getLog[]
然而,创建的图像是在某种 Java 窗口中。已经运行的 imageJ 根本不与它交互。此外,我似乎可以使用 getLog[] 捕获已经运行的 ImageJ 的日志。
同样,问题是,我可以使用 ImageJ 中未安装的外部脚本作为插件、脚本或宏在已经运行的 ImageJ 上显示图像吗?或者,我可以使用外部脚本在已经运行的 ImageJ 实例上调用预安装的宏吗?