数组不显示所有元素

时间:2015-10-21 18:23:54

标签: java arrays

我的程序中有一些代码。如你所见,我得到了矩阵中Image的所有像素。 在此代码中,我收到高度和重量,并成功计算图像中的总像素。

public static void GetMatrix(File input) {
       File file = input;
    try {
        Image image = ImageIO.read(file);
        int[][] matricesA = new int[image.getWidth(null)][image.getHeight(null)];
        System.out.println("Total Pixel : " + image.getWidth(null) * image.getHeight(null));
      System.out.println(fProjectionH(matricesA));   
    } catch (IOException ex) {
        Logger.getLogger(MatrixCompare.class.getName()).log(Level.SEVERE, null, ex);
    }
}

当计算水平投影时,我不会收到数组的所有元素(只有方形矩阵,例如,[120] * [120]),但Image实际上包含[210] [120 ] 这是寻找投影的代码

public static int fProjectionH(int[][] a) throws IOException
{   
    int err = 0;
       for(int j=0; j < a[j].length; j++){
            for(int i=0; i < a[i].length; i++){
                     int alt = a[j].length;
                     int[] proj = new int[alt]; 
                 if(a[j][i] == 255) {proj[j] += 1;}
                 System.out.println("a["+j+"]"+"["+i+"]="+proj[j]);   
           }     
        }      
       return err;
   }

我如何解决这个问题?

提前致谢!

UPD 1:我已经尝试了很多东西。

for(int i=0; i < a.length; i++){
            for(int j=0; j < a[j].length; j++){

UPD 2:忘记提及,我发布数组来运行      的System.out.println(的 fProjectionH (matricesA));

UPD 3:

private static void handlepixels(Image img, int x, int y, int w, int h, int[][] matrices) {
    int[] pixels = new int[w * h];
    PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
    try {
        pg.grabPixels();
    } catch (InterruptedException e) {
        System.err.println("interrupted waiting for pixels!");
        return;
    }
    if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
        System.err.println("image fetch aborted or errored");
        return;
    }
    for (int j = 0; j < h; j++) {
        for (int i = 0; i < w; i++) {
            matrices[i][j] = handlesinglepixel(x + i, y + j, pixels[j * w + i]);
        }
    }
}

UPD 4:我上传了GitHub [link] https://github.com/aydin1918/test

1 个答案:

答案 0 :(得分:6)

将for循环更改为:

   for(int j=0; j < a.length; j++){
        for(int i=0; i < a[j].length; i++){
             //do stuff  
       }     
    }

您的外部循环仅循环到120,因为您只是循环到a[j].length 120。您想要循环到a.length 210。希望这可以帮助。

示例:

int[][] a = new int[210][120];
int count = 0;
for(int j=0; j < a.length; j++){
    for(int i=0; i < a[j].length; i++){
        count++;
   }     
} 
System.out.println(count);

输出:

25200