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;
}
即使我将数组定义为图像高度和宽度的精确大小,但当它快要完成循环时,我还是收到了边界错误。不知道为什么。
"坐标出界!
在 sun.awt.image.ByteInterleavedRaster.getDataElements(来源不明)
在 java.awt.image.BufferedImage.getRGB(未知来源)
我想错误是你的 I 和 j 变量变得大于高度和宽度。尝试将 for 循环的条件更改为:
我 <= 身高
J <= 宽度
而不是:
我<身高
J < widtb
您的代码中的问题只是您混淆了 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
。这将使错误更容易被发现,尤其是在查阅文档时。
我正在尝试通过此方法将此 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;
}
即使我将数组定义为图像高度和宽度的精确大小,但当它快要完成循环时,我还是收到了边界错误。不知道为什么。
"坐标出界! 在 sun.awt.image.ByteInterleavedRaster.getDataElements(来源不明) 在 java.awt.image.BufferedImage.getRGB(未知来源)
我想错误是你的 I 和 j 变量变得大于高度和宽度。尝试将 for 循环的条件更改为:
我 <= 身高 J <= 宽度
而不是:
我<身高 J < widtb
您的代码中的问题只是您混淆了 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
。这将使错误更容易被发现,尤其是在查阅文档时。