title: Java getSubimage() outside of raster
body: <p>I'm trying to take an image and store it in an array of 16x16 subimages. The image I am using is 512x512 pixels. However, while iterating through the loop, getSubimage() is stopped by a Raster exception.</p>
  
  <p>Here is the code:</p>
  
  <pre><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 &lt; row; i++) {
  
          for (int j = 0; j &lt; 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
  </code></pre>
  
  <p>This is the error:</p>
  
  <pre><code>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.&lt;init&gt;(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)
  </code></pre>