Java getSubimage() en dehors de raster

Je suis en train de prendre une image et la stocker dans une matrice de 16x16, des sous-images. L'image que j'utilise est 512x512 pixels. Cependant, lors de l'itération dans la boucle, getSubimage() est arrêté par un Raster exception.

Voici le code:

public class TileList extends JPanel {
private static final int width = 16;          //width of a tile
private static final int height = width;
private int col = 1;
private int row = 1;
private BufferedImage image;
File tilesetImage = new File("image.png");
BufferedImage tileset[];
public void loadAndSplitImage (File loadImage) {
try{
image = ImageIO.read(loadImage);
}catch(Exception error) {
System.out.println("Error: cannot read tileset image.");
}//end try/catch
col = image.getWidth()/width;
row = image.getHeight()/height;
tileset = new BufferedImage[col*row];
}//end loadAndSplitImage
public TileList() {
loadAndSplitImage(tilesetImage);
setLayout(new GridLayout(row,col,1,1));
setBackground(Color.black);
int x=0;
int y=0;
int q=0;                                    //keeps track of tile #
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
JPanel panel = new JPanel();
tileset[q] = new BufferedImage(width, height, image.getType());
tileset[q] = image.getSubimage(x,y,x + width,y + height);
panel.add(new JLabel(new ImageIcon(tileset[q])));
add(panel);
x += width;
q++;
}//end for loop
y += height;
x = 0;
}//end for loop
}//end constructor
}//end class

C'est l'erreur:

Exception in thread "AWT-EventQueue-0" java.awt.image.RasterFormatException: (x
+ width) is outside of Raster
at sun.awt.image.ByteInterleavedRaster.createWritableChild(ByteInterleav
edRaster.java:1245)
at java.awt.image.BufferedImage.getSubimage(BufferedImage.java:1173)
at TileList.<init>(TileList.java:59)
at TileList.createAndShowGui(TileList.java:79)
at TileList$1.run(TileList.java:88)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

OriginalL'auteur Emily | 2013-01-11