簡體   English   中英

如何在imageJ宏的函數內傳遞參數?

[英]How to pass arguments within a function in imageJ macro?

我想將foldername傳遞給run()函數和save()函數,但它們都在引號內,而且我不知道如何傳遞變量名。

我使用imageJ中的record命令生成了run()和save()函數。

該程序的目的是自動化在多個文件夾上運行“ T2分析鼠標”插件的過程。 任何其他推文或幫助將不勝感激。

我找到了此在線資源https://imagej.nih.gov/ij/macros/ArgumentPassingDemo.txt,但它不起作用。

我嘗試了多種方式,包括/&foldername/3 T2 &filename/3 T2 /&foldername 3 T2``/&foldername3 T2 /&filename 3 T2``/&filename3 T2這是我寫的代碼:

function makeT2(foldername)
{
    filename = foldername;
    print(filename);
    run("T2 Analysis mouse", "select=[/Users/Vineeth/Desktop/New stuff Feb 5/&filename 3 T2] 
        image=[32-bit Signed] width=256 height=128 offset=0 number=902 gap=0 little-endian");
    run("Save", "save=[/Users/Vineeth/Desktop/New stuff Feb 5/&foldername3 T2/T2map.tif]");
    close();
}

folders = getFileList("/Users/Vineeth/Desktop/New stuff Feb 5/");

for( i = 0; i < folders.length; i++)
{
  print(folders[i]);
  file = getFileList("/Users/Vineeth/Desktop/New stuff Feb 5/" + folders[i]);
  for( j = 0; j < file.length; j++)
  {
    if(file[j] == "3 T2/")
    {
      print("made t2 for  " + folders[i] + file[j]);
      makeT2(folders[i]);

    }
  }
}

各種print()函數用於測試代碼,並且該代碼通常可以正常使用makeT2函數。

這是錯誤:

java.lang.NullPointerException
at T2_Analysis_mouse.getImage(T2_Analysis_mouse.java:183)
at T2_Analysis_mouse.run(T2_Analysis_mouse.java:56)
at ij.IJ.runUserPlugIn(IJ.java:183)
at ij.IJ.runPlugIn(IJ.java:150)
at ij.Executer.runCommand(Executer.java:124)
at ij.Executer.run(Executer.java:61)
at ij.IJ.run(IJ.java:249)
at ij.macro.Functions.doRun(Functions.java:561)
at ij.macro.Functions.doFunction(Functions.java:79)
at ij.macro.Interpreter.doStatement(Interpreter.java:203)
at ij.macro.Interpreter.doBlock(Interpreter.java:518)
at ij.macro.Interpreter.runUserFunction(Interpreter.java:278)
at ij.macro.Interpreter.doStatement(Interpreter.java:206)
at ij.macro.Interpreter.doBlock(Interpreter.java:518)
at ij.macro.Interpreter.doStatement(Interpreter.java:239)
at ij.macro.Interpreter.doIf(Interpreter.java:852)
at ij.macro.Interpreter.doStatement(Interpreter.java:215)
at ij.macro.Interpreter.doBlock(Interpreter.java:518)
at ij.macro.Interpreter.doStatement(Interpreter.java:239)
at ij.macro.Interpreter.doFor(Interpreter.java:464)
at ij.macro.Interpreter.doStatement(Interpreter.java:221)
at ij.macro.Interpreter.doBlock(Interpreter.java:518)
at ij.macro.Interpreter.doStatement(Interpreter.java:239)
at ij.macro.Interpreter.doFor(Interpreter.java:464)
at ij.macro.Interpreter.doStatement(Interpreter.java:221)
at ij.macro.Interpreter.doStatements(Interpreter.java:191)
at ij.macro.Interpreter.run(Interpreter.java:102)
at ij.macro.Interpreter.run(Interpreter.java:72)
at ij.macro.MacroRunner.run(MacroRunner.java:124)
at java.lang.Thread.run(Thread.java:695)

這是運行progran之后的日志:

LeeMouseOld_30Jan18.LH1/
made t2 for  LeeMouseOld_30Jan18.LH1/3 T2/
LeeMouseOld_30Jan18.LH1/
Please choose a directory where the T1 or T2 folder is the last item in the path (i.e. 5_t1 or 6_t2)
Directory return for General T folder: /Users/Vineeth/Desktop/New stuff Feb 5/&filename 3 T2/
Please adjust import settings to:
Image type: 32-bit signed
Width: 128 pixels
Height: 256 pixels
Number of images: 50 images
Check Little-endian byte order

如您所見, &filename保持不變,但我希望變量filename的數據能代替它。

使用字符串串聯

run("T2 Analysis mouse", "select=[/Users/Vineeth/Desktop/New stuff Feb 5/" + filename + " 3 T2] 
        image=[32-bit Signed] width=256 height=128 offset=0 number=902 gap=0 little-endian");
run("Save", "save=[/Users/Vineeth/Desktop/New stuff Feb 5/" + foldername + "3 T2/T2map.tif]");

請參閱宏功能文檔 (添加了重點):

run(“ command” [,“ options”])

執行ImageJ菜單命令。 可選的第二個參數包含自動輸入到對話框中的值(必須是GenericDialog或OpenDialog)。 使用命令記錄器(插件>宏>記錄)來生成run()函數調用。 使用字符串連接將變量作為參數傳遞。 在ImageJ 1.43和更高版本中,可以通過在變量名稱上添加“&”來傳遞變量而無需使用字符串連接。 有關示例,請參見ArgumentPassingDemo宏。

提及的帶有&快捷方式語法在選項字符串的方括號[]之間不起作用。

ImageJ論壇上的許多問題也對此進行了討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM