ImageJ宏中的奇怪Javascript循环行为(Rhino)

时间:2015-12-16 19:15:50

标签: javascript for-loop rhino imagej imagej-macro

循环

   //imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    } 

给出输出

imageRows: 6
imageRows: 6 gridY: 1 gridY < imageRows + 1: true
imageRows: 6 gridY: 2 gridY < imageRows + 1: true
imageRows: 6 gridY: 3 gridY < imageRows + 1: true
imageRows: 6 gridY: 4 gridY < imageRows + 1: true
imageRows: 6 gridY: 5 gridY < imageRows + 1: true
imageRows: 6 gridY: 6 gridY < imageRows + 1: true
imageRows: 6 gridY: 7 gridY < imageRows + 1: true
imageRows: 6 gridY: 8 gridY < imageRows + 1: true
imageRows: 6 gridY: 9 gridY < imageRows + 1: true
    .....
imageRows: 6 gridY: 59 gridY < imageRows + 1: true
imageRows: 6 gridY: 60 gridY < imageRows + 1: true

但是,取消注释imageRows = 6;

    imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    }

给出了预期的结果:

imageRows: 6
imageRows: 6 gridY: 1 gridY < imageRows + 1: true
imageRows: 6 gridY: 2 gridY < imageRows + 1: true
imageRows: 6 gridY: 3 gridY < imageRows + 1: true
imageRows: 6 gridY: 4 gridY < imageRows + 1: true
imageRows: 6 gridY: 5 gridY < imageRows + 1: true
imageRows: 6 gridY: 6 gridY < imageRows + 1: true

ImageJ使用Rhino引擎运行Javascript宏。

注意:上面的循环嵌套在另一个循环中。但出于调试目的,我在外循环中注释掉了所有其他行。

编辑:为了它的价值,我将外部循环的其余部分x出来:

numImages = 1;
for (var imageNumber = 1 ; imageNumber < numImages + 1 ; imageNumber++)
{

    imageRows = 6;
    print("imageRows: " + imageRows);
    for (var gridY = 1 ; gridY < imageRows + 1 ; gridY++)
    {
        print("imageRows: " + imageRows + " gridY: " + gridY + " gridY < imageRows + 1: " + (gridY < imageRows + 1));
    } 

} 

和完全相同的行为。

1 个答案:

答案 0 :(得分:0)

史蒂文拉克斯带领我走向正确的方向。 imageRows确实不是有效数字。我正在从一个文件中读到它:

importClass(Packages.ij.IJ);
....
var gridConfigurationRawData = IJ.openAsString(folder + IMAGE_GRID_CONFIGURATION_FILENAME); 
var arrayOfData = gridConfigurationRawData.split("\n");
....
var imageRows = dataLine[1];

当我检查类型时:

print("typeof imageRows: " + (typeof imageRows));

我得到object

当我改为:

var imageRows = parseInt(dataLine[1]);

它有效。

在ImageJ中编写Javascript宏非常棘手。