我试图将一个参数从ImageJ插件传递给imageJ宏。基本上,我从我的ImageJ Java插件中调用宏来打开一堆图像,并希望能够将整数值传递给插件,以便能够将它附加到文件路径的末尾。
现在我可以打开一堆图像,对插件内的活动图像执行我需要做的任何操作,然后关闭图像堆栈,这样我就可以打开下一叠图像了。
这是我在Java插件中所做的基本格式:
(general import stuff)
import ij.plugin.Macro_Runner;
Macro_Runner test_runner = new Macro_Runner();
test_runner.run("OpenFrameSequence.ijm");
// pixel analysis
test_runner.run("closeMacro.ijm");**
这是Macro OpenFrameSequence.ijm:
var x = 0;
x = getNumber("Bias Frame Sequence Length:", x);
run("Image Sequence...", "open=[C:\\Documents and Settings\\Developer\\Desktop\\PLPT_IMAGEJ_PICS\\BiasFrameSequence\\1.jpg] number=x sort use");
这是Macro closeMacro.imj
close();
上面插件部分的第四行是我遇到的问题,我可以调用另一个函数runMacro();
,这里定义了:
http://rsbweb.nih.gov/ij/developer/api/ij/plugin/Macro_Runner.html
所以我想做的是:
int i = 1;
test_runner.runMacro("OpenFrameSequence.ijm", i);
然后,在宏中,取i的值并将其用作变量。 runMacro()函数似乎没有工作(我也尝试发送一个String代替int i)。
任何帮助都将不胜感激。
答案 0 :(得分:0)
在Macro_Runner#runMacro(String macro, String arg)
的javadoc中,它说:
在当前线程上运行指定的宏。宏可以检索 通过调用getArgument()宏可选的字符串参数 功能。返回宏返回的字符串值,如果是,则返回null 宏不返回值,或" [aborted]"如果宏被中止 由于错误。
所以下面的Javascript(和等效的Java)按预期工作:
importClass(Packages.ij.plugin.Macro_Runner);
var i = 42;
mr = new Macro_Runner();
mr.runMacro("print(getArgument());", i);
如果要运行宏文件而不是原始宏代码,则应使用Macro_Runner#runMacroFile
:
test_runner.runMacroFile("OpenFrameSequence.ijm", i);