我将在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");
}
}
答案 0 :(得分: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");
}
}