我正在尝试根据以下参数合并两个B& W图像。
新创建的数组使用两个图像的宽度和高度中最大的一个。数组中特定点的int包含一个表示灰度值的数字。新的2D阵列将根据以下条件合并两个图像。
这是我的代码。它不会因为某种原因返回arrayIndexOutOfBounds: 167
而运行。如果有人能看一下,我会很感激。
public static int[][] merge(int[][] a, int[][] b)
{
int biggerx = 0;
int biggery = 0;
if (a[0].length > b[0].length) {
biggery = a[0].length;
}
else {
biggery = b[0].length;
}
if (a.length > b.length) {
biggerx = a.length;
}
else {
biggerx = b.length;
}
int[][] merged = new int[biggerx][biggery];
for (int x = 0; x < merged.length; x++) {
for (int y = 0; y < merged[x].length; y++) {
if (x <= a.length && y <= a[x].length && x > b.length && y > b[x].length) {
merged[x][y] = a[x][y];
}
else if (x <= b.length && y <= b[x].length && x > a.length && y > a[x].length) {
merged[x][y] = b[x][y];
}
else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
merged[x][y] = ((a[x][y] + b[x][y]) /2);
}
else {
merged[x][y] = 127;
}
}
}
return merged;
}
答案 0 :(得分:0)
else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
merged[x][y] = ((a[x][y] + b[x][y]) /2); // <= problematic line
}
在这一行中,你试图达到一个超出界限的点。在我的示例中,我将a设置为(10, 10)
,将b设置为(5, 20)
。它在x = 0, y = 10
时崩溃了。现在,正如您所看到的,a[0][10]
已超出范围。
这是我的试用代码及其输出:
else if (x <= b.length && y <= b[x].length && x <= a.length && y <= a[x].length) {
System.out.println("x = " + x + " y = " + y);
System.out.println("merged.length = " + merged.length);
System.out.println("merged[0].length = " + merged[0].length);
System.out.println("a.length = " + a.length);
System.out.println("a[0].length = " + a[0].length);
System.out.println("b.length = " + b.length);
System.out.println("b[0].length = " + b[0].length);
System.out.println();
System.out.println();
merged[x][y] = ((a[x][y] + b[x][y]) /2);
}
输出:
x = 0 y = 10
merged.length = 10
merged[0].length = 20
a.length = 10
a[0].length = 10
b.length = 5
b[0].length = 20
编辑:刚才注意到我提出的解决方案不适合你。
EDIT2:x <= a.length
和y <= a[x].length
种语句需要更改为x < a.length
和y < a[x].length
或x <= a.length - 1
和y <= a[x].length - 1