getSubimage()方法中的超出范围异常

时间:2016-09-23 01:45:13

标签: java bufferedimage

我已经制作了一小段代码将spritesheets分成单独的图像......

private BufferedImage sheet, dirt, grass, rock, tree, water;

    int width = 64, height = 64;

        public void split() {
            dirt = sheet.getSubimage(0,0,width,height);
            grass = sheet.getSubimage(width,0,width*2,height);
            rock = sheet.getSubimage(width*2,0,width*3,height);
            tree = sheet.getSubimage(0,height,width,height*2);
            water = sheet.getSubimage(width,height,width*2,height*2);
        }

现在,前两个(污垢和草)按预期顺利进行。然而,问题在于岩石种植线。出于某种原因,它会导致异常......

" 线程中的异常"线程0" java.awt.image.RasterFormatException:(x + width)在Raster之外 at sun.awt.image.ByteInterleavedRaster.createWritableChild(ByteInterleavedRaster.java:1245)

"

显然,问题在于x值是否超出范围"。但x值是(宽度* 2),所以128pix,这是该图像(192x128)的边界,我作为证据附加。

我还修改了一些代码,使用x值为1来进行裁剪,但我仍然遇到问题,与使用相同尺寸的bufferedImage相同。

对于这篇文章中的任何错误,我很抱歉,这是我的第一次。

提前致谢

The image

1 个答案:

答案 0 :(得分:1)

回答我的评论。

所以你走的是正确的道路,但不太了解getSubimage()的工作原理。

文档说

  

参数:

     

x - 指定矩形区域左上角的X坐标

     

y - 指定矩形区域左上角的Y坐标

     

w - 指定矩形区域的宽度

     

h - 指定矩形区域的高度

您正确设置了xy值,但是在设置widthheight值时出错了。

由于您是从(x,y)点开始的,因此您不需要像现在这样补偿widthheight,而只需按原样使用它们。

所以,你的代码是

public void split() {
            dirt = sheet.getSubimage(0,0,width,height);
            grass = sheet.getSubimage(width,0,width,height);
            rock = sheet.getSubimage(width*2,0,width,height);
            tree = sheet.getSubimage(0,height,width,height);
            water = sheet.getSubimage(width,height,width,height);
        }