【问题标题】:How do I pass an argument to an ImageJ macro from within an ImageJ Java plugin?如何从 ImageJ Java 插件中将参数传递给 ImageJ 宏?
【发布时间】:2014-06-06 21:19:51
【问题描述】:

我正在尝试将参数从 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");**

这是宏 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");

这里是宏 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() 函数似乎不起作用(我也尝试发送一个字符串来代替 int i)。

任何帮助将不胜感激。

【问题讨论】:

    标签: java plugins macros imagej


    【解决方案1】:

    Macro_Runner#runMacro(String macro, String arg) 的 javadoc 中,它说:

    在当前线程上运行指定的宏。宏可以检索 通过调用 getArgument() 宏的可选字符串参数 功能。返回宏返回的字符串值,如果是 宏不返回值,如果宏被中止,则返回“[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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多