File newFile = null;
BufferedImage oldImage = null;
BufferedImage newImage = null;
String fileName = new String((args[0]));
String newFileName = new String(fileName.replaceFirst(".png", "-tiled.png"));
try{
oldImage = ImageIO.read(new File(fileName));
System.out.println("Reading Complete");
}
catch(IOException e) {
System.out.println("Error: "+ e);
}
int width = oldImage.getWidth();
int height = oldImage.getHeight();
newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
int imagePixels [][] = new int [height][width];
for (int i = 0; i < height -1; ++i) {
for (int j = 0; j < width - 1; ++j) {
imagePixels[i][j] = oldImage.getRGB(i,j); //error here
}
}
它编译得很好,但是当我运行该程序时,它将完美地运行10x10图像,但是当我尝试使用800x600图像时它将无法工作,并且在评论行上发生错误说
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source)
at java.awt.image.BufferedImage.getRGB(Unknown Source)
at imagery.ImageTiler.main(ImageTiler.java:35)
有人能发现这个恼人的错误吗?
一个小小的信息:程序从命令行获取文件名,然后将RGB像素加载到2D数组中。
感谢任何帮助。欢呼声。
答案 0 :(得分:2)
您在getRGB
电话中的坐标错误。图像高度在Y方向,但您使用高度作为i
... X坐标的边界。
This page解释了Java图像坐标系。
答案 1 :(得分:0)
尝试更改for循环:
for (int i = 0; i < width -1; ++i) {
for (int j = 0; j < height - 1; ++j) {
imagePixels[i][j] = oldImage.getRGB(i,j); //error here
}
这将以正确的方式绘制数组...