我正在尝试打印每个像素的值,但在p = 300
时会出错。
在p = 300
之前,会打印所有像素。
orignal.getHeight() = 344;
和orignal.getWidth() = 300;
。
BufferedImage binarized = new BufferedImage(original.getWidth(), original.getHeight(), original.getType());
int p, q;
System.out.println(original.getHeight() + "," + original.getWidth());
for(p=0;p<original.getHeight();p++)
{
for(q = 0; q < original.getWidth(); q++)
{
//System.out.println("goint to get pixel"+"("+p+","+q+")");
int Pixel = binarized.getRGB(p, q);
}
}
错误讯息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(ByteInterleavedRaster.java:318)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
at Binarization.binarize(Binarization.java:137)
at Binarization.main(Binarization.java:20)
这是某种内存分配问题吗?
答案 0 :(得分:7)
不,这意味着您的逻辑中存在错误。
您尝试按索引访问数组元素,该元素大于数组大小
尝试更改数组检索的逻辑:
int Pixel=binarized.getRGB(q,p);
这是有效的,因为该方法需要:getRGB(int width,int height),但是你提供高度,宽度
答案 1 :(得分:3)
public int getRGB(int x, int y)
请注意,x
值是第一个参数 - ,应该在[0,width]范围内的。 y
值是第二个参数 - 即应该在[0,height]范围内的参数。你错了路。不可否认,我对此例外并不友好感到有些失望。
如果您在循环中使用x
和y
变量,那就更清楚了:
for (int y = 0; y < original.getHeight(); y++)
{
for (int x = 0; x < original.getWidth(); x++)
{
int pixel = binarized.getRGB(x, y);
// Use pixel
}
}
(另请注意我如何在循环中声明x
和y
;事先声明它们是没有意义的。我还添加了空格以便于阅读。)