无法将图像加载到缓冲图像2D阵列中

时间:2014-04-12 06:52:23

标签: java arrays bufferedimage

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数组中。

感谢任何帮助。欢呼声。

2 个答案:

答案 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

}

这将以正确的方式绘制数组...