[英]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(未知源)”
代碼中的問題僅僅是,您混淆了i
和j
含義以及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(在高度上迭代),所以最好將它們命名為x
和y
。 這將使錯誤更容易發現,尤其是在查閱文檔時。
我認為錯誤是您的I和j變量變得大於高度和寬度。 嘗試將for循環的條件更改為:
I <=高度J <=寬度
代替:
I <高度J <widtb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.