该方法以开头,并且应该返回大小为[img[0].length*factor_h]*[img.length*factor_w]
的数组
public static int[][] scaleup(double factor_j,double factor_w,int [][]img)}//the method
int[][] answer= new int[img.length][img[0].length];
for (int i = 0; i < img.length; i++) {
for (int j = 0; j < img[0].length; j++) {
for (int f_w = 0; f_w<=img[0].length; f_w++) {//f_w is smaller than the factor_w
for (int f_h = 0; f_h <= img.length; f_h++) {
answer[(int) (i * factor_h) + f_h][(int) (j * factor_w) + f_w] = img[j][i];
}
}
}
}
return answer;
}
}
无法使这种方法正常工作,但超出了范围
答案 0 :(得分:0)
您的问题出在这一行:
int[][] answer= new int[img.length][img[0].length];
您说的答案与旧img的大小相同(以64x64为例)。因此,您现在有了一个64x64的数组。所以最后一个场/像素是answer[63][63]
。
在这一行代码中:
answer[(int) (i * factor_h) + f_h][(int) (j * factor_w) + f_w] = img[j][i];
您说第一个索引是i * factor_h + f_h
。
您的变量i
从0到63,而您的f_h
从0到64。
我认为您不能选择factor_h
来避免根本无法解决的错误。所以,以正确的方式初始化您的答案数组,否则将无法正常工作。
第二个索引也与j
和factor_w
/ f_w
相同。
答案 1 :(得分:0)
public static int[][] scaleup(double factor_h, double factor_w, int[][] im) {
int[][] answer = new int[(int) (im.length * factor_h) + 1][(int) (im[0].length * factor_w) + 1];
for (int i = 0; i < im.length; i++) {
for (int j = 0; j < im[0].length; j++) {
for (int f_w = 0; f_w < factor_h; f_w++) {
for (int f_h = 0; f_h < factor_w; f_h++) {
answer[(int) (i * factor_h + f_w)][(int) (j * factor_w + f_h)] = im[i][j];
}
}
}
}
return answer;
}