【发布时间】:2013-01-17 09:01:20
【问题描述】:
我目前正试图让我的头脑围绕 imagej,并试图复制图像并吐出输出。总体思路是获取图像,从图像处理器中获取像素阵列,将其复制到新阵列中,然后从该阵列构建新图像。
现在,aPixels_org[0] 的值存在,您可以从控制台输出中看到。但即使我进行了所有检查,它仍然会引发 arrayoutofbounds 异常。
这是代码...(顺便说一句。只是一个记录器对象,只是一个健全性检查以检查数组值是否存在于下面的 if 条件中。请告知是否有更好的方法,就像我一样一个 c++ 人,习惯于直接检查东西,因为 java 不允许 if(int){} 检查)
我从一个函数中获取 aPixels_org,aPixels_dup 就是这样创建的
int[] aPixels_dup = new int[iWidth*iHeight];
其中 iWidth*iHeight 是所需数组的大小。我还尝试使用 array.length() 选项直接生成大小。 问题代码是
System.out.println(">>>>>>>>>>>>>>>>>>>>>." + aPixels_dup[0] +" " + aPixels_org[0] + " " + iWidth + " " + iHeight);
if(Integer.toString(aPixels_org[0]) != null && Integer.toString(aPixels_dup[0]) != null )
{
l.info("Arrays exsist");
System.arraycopy(aPixels_org,0,aPixels_dup,0,iWidth*iHeight);
l.info("Array Copied");
}
else{l.warn("Something is NULL");}
l.info("");
这是错误
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at Alpha_.DuplicateCurrentImage(Alpha_.java:64)
at Alpha_.run(Alpha_.java:81)
at ij.IJ.runUserPlugIn(IJ.java:185)
at ij.IJ.runPlugIn(IJ.java:152)
at ij.Executer.runCommand(Executer.java:127)
at ij.Executer.run(Executer.java:64)
at java.lang.Thread.run(Thread.java:679)
这是控制台输出
[INFO] % FILE: Alpha_.java % CLASS: Alpha_ % FUNCTION: DuplicateCurrentImage % LINE: 59 % COMMENT: OK % % % TIMESTAMP: 2013-01-17 00:26:55,942
0 -1393202 466 466
[INFO] % FILE: Alpha_.java % CLASS: Alpha_ % FUNCTION: DuplicateCurrentImage % LINE: 63 % COMMENT: Arrays exsist % % % TIMESTAMP: 2013-01-17 00:26:55,942
我的输出到此结束,程序因上述错误而崩溃。如您所见,所有 4 个值都以某种形式存在。我google了一下错误,发现错误是
抛出以指示已使用非法索引访问了数组。索引为负数或大于等于数组的大小。
我在这里遗漏了什么明显的东西吗?
重新
【问题讨论】:
-
这是一个很好的练习,可以让你做更复杂的事情,但如果你想做的只是创建一个图像的副本调用'ImageProcessor.duplicate()'