次のパラメータに基づいて 2 つの B&W 画像をマージしようとしています。
新しく作成された配列は、2 つの画像の幅と高さのうち最大のものを独自のものとして使用します。配列内の特定の位置にある int には、グレー スケール量を表す数値が含まれます。新しい 2D 配列は、次の条件に基づいて 2 つの画像をマージします。
- 位置が両方の配列に存在する場合、結果配列の値は配列 a と b の値の平均です。
- 位置が配列 a にのみ存在する場合、結果配列の値は配列 a の値です。
- 位置が配列 b にのみ存在する場合、結果配列の値は配列 b の値です。
- 位置がどちらの配列にもない場合は、結果配列のその位置に 127 の値を割り当てます。
これが私のコードです。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;
}