如何使用最近邻系统制作图像缩放的方法

时间:2019-12-14 12:58:46

标签: java image

该方法以开头,并且应该返回大小为[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;
    }
}

无法使这种方法正常工作,但超出了范围

2 个答案:

答案 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来避免根本无法解决的错误。所以,以正确的方式初始化您的答案数组,否则将无法正常工作。

第二个索引也与jfactor_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;
}