Java 光栅格式异常(Y+;高度) 宽度=25; 高度=25; h1Walking=新的缓冲区映像[6]; BuffereImage sprite1=ImageIO.read(新文件(getClass().getResource(“/Resources/kirbywalk.gif”).toURI()); 对于(int i=0;i也许您正在浏览“/Reals/KyByWalth.GIF”/P>的像素边界。

Java 光栅格式异常(Y+;高度) 宽度=25; 高度=25; h1Walking=新的缓冲区映像[6]; BuffereImage sprite1=ImageIO.read(新文件(getClass().getResource(“/Resources/kirbywalk.gif”).toURI()); 对于(int i=0;i也许您正在浏览“/Reals/KyByWalth.GIF”/P>的像素边界。,java,exception,raster,Java,Exception,Raster,我上面的代码就是在我的程序中返回错误的部分。我不明白它为什么会这样做有人知道它为什么会返回下面的错误吗 width = 25; height = 25; h1Walking = new BufferedImage[6]; BufferedImage sprite1 = ImageIO.read(new File(getClass().getResource("/Resources/kirbywalk.gif").toURI()));

我上面的代码就是在我的程序中返回错误的部分。我不明白它为什么会这样做有人知道它为什么会返回下面的错误吗

    width = 25;
    height = 25;

    h1Walking = new BufferedImage[6];   
        BufferedImage sprite1 = ImageIO.read(new File(getClass().getResource("/Resources/kirbywalk.gif").toURI()));
        for(int i = 0; i < h1Walking.length; i++){
            h1Walking[i] = sprite1.getSubimage(
                    i * width + i,
        0,
        width,
        height
                );
        }
java.awt.image.RasterFormatException:(y+高度)在光栅外部
位于sun.awt.image.BytePackedMaster.createWritableChild(BytePackedMaster.java:1312)
位于java.awt.image.BuffereImage.getSubimage(BuffereImage.java:1196)
在Main.Horses.(Horses.java:72)
在Main.horseracingame.run(horseracingame.java:113)
运行(Thread.java:695)

光栅格式异常来自
getSubimage
调用:

java.awt.image.RasterFormatException: (y + height) is outside of Raster
    at sun.awt.image.BytePackedRaster.createWritableChild(BytePackedRaster.java:1312)
    at java.awt.image.BufferedImage.getSubimage(BufferedImage.java:1196)
    at Main.Horses.<init>(Horses.java:72)
    at Main.HorseRacingGame.run(HorseRacingGame.java:113)
    at java.lang.Thread.run(Thread.java:695)
getSubimage
方法将
x
y
width
height
作为参数,其中x和y是子图像左上像素的坐标(从)

如果参数引用的子图像不受图像的限制,则会引发
RasterFormatException
。所以,参数中的某些内容超出了图像的范围

对于x,您使用的是
i*width+i
,但我相信您的意思是
i*width
。这将确保图片的每个垂直条从最后一条的结束处开始


此外,问题可能是使用恒定的宽度和高度会给您带来错误。相反,您可以考虑执行<代码> SpReTe1.GETWITHOTH()/H1WORK.长度和高度类似。

< P>也许您正在浏览“/Reals/KyByWalth.GIF”/P>的像素边界。 如果您知道子图像的数量,并且它们是水平放置的,那么可以实现如下操作:

h1Walking[i] = sprite1.getSubimage(
    i * width + i,
    0,
    width,
    height
);
//加载图像
BuffereImage sprite1=ImageIO.read(新文件(getClass().getResource(“/Resources/kirbywalk.gif”).toURI());
//声明图像中单元格的数量
int num_of_cells=6;
h1Walking=新缓冲区图像[单元数];
//根据原始图像查找单元格高度和宽度
int width=sprite1.getWidth()/num\u个单元格;
int height=sprite1.getHeight()
for(int i=0;i

通过轮询图像的高度和宽度,您可以确保您的所有点都将保持在gif限制内。

你好,卢克,位置正确。谢谢你指出我自己回答的愚蠢之处。。。干杯:-)
// load the image
BufferedImage sprite1 = ImageIO.read(new File(getClass().getResource("/Resources/kirbywalk.gif").toURI()));
// declare ammount of cells in image
int num_of_cells = 6;
h1Walking = new BufferedImage[num_of_cells];
// find cell height and width based on the original image
int width = sprite1.getWidth()/ num_of_cells;
int height = sprite1.getHeight()

for(int i = 0; i < num_of_cells; i++)
    h1Walking[i] = sprite1.getSubimage( i *width,0,width,height);