簡體   English   中英

BufferedImage.getRGB中的坐標超出范圍

[英]Coordinate out of bounds in BufferedImage.getRGB

我試圖通過此方法將此png圖像從BufferedImage轉換為雙精度數組。

public double[][] bufferedToArray(File pngImage)
{       
    double[][] imageMatrix= null;
    try {

        final BufferedImage image = ImageIO.read(pngImage);
        int height= image.getHeight();
        int width= image.getWidth();
        imageMatrix= new double[height][width];

        System.out.println("Matriz Máximo i: " + imageMatrix.length +
                "Matriz Máximo j: " + imageMatrix[0].length );

        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){

                //System.out.println("i atual: "+i+" j atual: "+j);
                imageMatrix[i][j] = image.getRGB(i, j); //The error is in this line.
                //System.out.println("matrizImagem["+i+"]["+j+"] Inserido");

            }           
        }                       

    } catch (IOException e) {       
        e.printStackTrace();
    }
    return imageMatrix; 
}

甚至我將數組定義為圖像高度和寬度的大小時,在幾乎完成循環時,也遇到了邊界錯誤。 我不知道為什么

“超出范圍!在java.awt.image.BufferedImage.getRGB(未知源)處的sun.awt.image.ByteInterleavedRaster.getDataElements(未知源)”

代碼中的問題僅僅是,您混淆了ij含義以及getRGB(x, y)期望的參數。 您的代碼僅會(僅)適用於正方形圖像。

換行:

imageMatrix[i][j] = image.getRGB(i, j); //The error is in this line.

至:

imageMatrix[i][j] = image.getRGB(j, i);

將解決問題。

但是,(如VGR在他的評論中指出),使用更有意義的變量名是一種好習慣。 因為j是您的X坐標(在寬度上迭代),而i是您的Y(在高度上迭代),所以最好將它們命名為xy 這將使錯誤更容易發現,尤其是在查閱文檔時。

我認為錯誤是您的I和j變量變得大於高度和寬度。 嘗試將for循環的條件更改為:

I <=高度J <=寬度

代替:

I <高度J <widtb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM