Java BuffereImage.getRGB中的坐标超出边界
我正试图通过这种方法将这个PNG图像从BuffereImage转换为双数组Java BuffereImage.getRGB中的坐标超出边界,java,indexoutofboundsexception,bufferedimage,Java,Indexoutofboundsexception,Bufferedimage,我正试图通过这种方法将这个PNG图像从BuffereImage转换为双数组 public double[][] bufferedToArray(File pngImage) { double[][] imageMatrix= null; try { final BufferedImage image = ImageIO.read(pngImage); int height= image.getHeight(); in
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;
}
public double[][]bufferedToArray(文件pngImage)
{
double[]imageMatrix=null;
试一试{
最终缓冲区图像=图像IO.read(pngImage);
int height=image.getHeight();
int width=image.getWidth();
imageMatrix=新的双[高][宽];
System.out.println(“Matriz Máximo i:”+imageMatrix.length+
Matriz Máximo j:“+imageMatrix[0].长度);
for(int i=0;i我认为错误在于i和j变量变得大于高度和宽度。请尝试将for循环的条件更改为:
I你的代码中的问题很简单,你混淆了I
和j
的意思,以及getRGB(x,y)
期望的参数。你的代码(意外地)只适用于方形图像
更改行:
imageMatrix[i][j] = image.getRGB(i, j); //The error is in this line.
致:
这将解决问题
然而,(正如VGR在他的评论中指出的那样),使用更有意义的变量名是一种很好的做法。因为j
是你的X坐标(在宽度上迭代),而i
是你的Y坐标(在高度上迭代),可能最好这样命名,x
和y
。这将使错误更容易发现,尤其是在查阅文档时。而不是i
和j
,分别使用y
和x
作为循环变量。然后阅读。问题应该会变得清楚@JamesB它“克服<实例”是什么意思?它在已经超出范围的循环迭代中添加了另一个循环迭代。
imageMatrix[i][j] = image.getRGB(j, i);