1

我修改了在 ImageJ 留言板上找到的以下宏以批量拆分通道,创建一个名为“OneChannel”的新文件夹并将输出保存在新文件夹中。代码按预期工作:它创建新文件夹,拆分通道,并以新名称保存它们。唯一的问题是它将新文件保存在与原始文件相同的文件夹中,之后我必须手动将它们拖到新创建的文件夹中。我试过弄乱这个,但我不能让它工作。任何输入将不胜感激,我对 Java 很陌生。

dir=getDirectory("Choose a Directory"); 
print(dir); 
splitDir= dir + "OneChannel"; 
print(splitDir); 
File.makeDirectory(splitDir); 
list = getFileList(dir); 

for (i=0; i<list.length; i++) { 
     if (endsWith(list[i], ".tif")){ 
               print(i + ": " + dir+list[i]); 
             open(dir+list[i]); 
             imgName=getTitle(); 
         baseNameEnd=indexOf(imgName, ".tif"); 
         baseName=substring(imgName, 0, baseNameEnd);
         run("Split Channels"); 
         selectWindow(imgName + " (blue)"); 
         close(); 
         selectWindow(imgName + " (green)"); 
         saveAs("Tiff",  splitDir + baseName +  "-AnkG.tif"); 
         close(); 
         selectWindow(imgName + " (red)");
         run("Close All"); 
     } else {
     write("One Channel Conversion is Complete");
     }
} 
4

1 回答 1

1

我实际上想通了这一点。在第 3 行中,我需要输入“/OneChannel/”。一旦我这样做,它就可以正常工作。我想我之前没有指定真实的文件路径,但现在下面的工作正常。

dir=getDirectory("Choose a Directory"); 
print(dir); 
splitDir= dir + "/OneChannel/"; // This was my error, I left out "//" surrounding OneChannel
print(splitDir); 
File.makeDirectory(splitDir); 
list = getFileList(dir); 

for (i=0; i<list.length; i++) { 
     if (endsWith(list[i], ".tif")){ 
               print(i + ": " + dir+list[i]); 
             open(dir+list[i]); 
             imgName=getTitle(); 
         baseNameEnd=indexOf(imgName, ".tif"); 
         baseName=substring(imgName, 0, baseNameEnd);
         run("Split Channels"); 
         selectWindow(imgName + " (blue)"); 
         close(); 
         selectWindow(imgName + " (green)"); 
         saveAs("Tiff",  splitDir + baseName "-AnkG.tif"); 
         close(); 
         selectWindow(imgName + " (red)");
         run("Close All"); 
     } else {
     write("One Channel Conversion is Complete");
     }
} 
于 2016-03-22T12:39:28.543 回答