[英]Controlling already existing instance of ImageJ
首先,我不太熟悉Java。 实际上,我正在使用JLink / Mathematica做我想做的事情。
在我们的实验室中,我们正在使用Mathematica控制的相机为实验拍照。 我们想将图像显示程序转换为ImageJ。 另一个程序是内存占用器,它很慢。
通过研究,我可以通过编写插件,脚本或宏来实现这一目标。 我的印象是,我写的任何东西都将安装到ImageJ中并由默认GUI控制。
我的问题是,我可以编写一个外部程序来控制已经运行的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实例上调用预安装的宏?
您尝试执行的操作称为进程间通信 。 ImageJ具有将信息传递到正在运行的实例的机制。 转到编辑▶选项▶杂项...,然后选中“运行单实例侦听器”框。 但是,此功能仅限于命令行参数。 因此,您可以通过尝试启动具有所需参数的第二个ImageJ(例如,然后将其传递到运行的实例)来告诉正在运行的实例从磁盘打开映像。 但是您不能直接在电线上馈送像素-您必须将它们写入临时文件。
您最简单的选择是通过ImageJ进行所有操作。 但这并不是将当前的方案与Mathematica混合在一起的最简单的转变。
因此,下一个最简单的事情是从Mathematica启动ImageJ,并始终与该ImageJ的同一实例通信以完成所有操作。 也许你可以做到?
如果必须与外部启动的ImageJ实例进行通信,则需要使用上面提到的CLI参数传递方案,或者实现自己的某种进程间通信方案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.