static Dimension map = new Dimension(42, 30); static Dimension tile = new Dimension(16, 16); static File tilefile = new File("D:/tileset.png"); static BufferedImage tileset; static BufferedImage[] tiles; static { if (tiles == null) { try { tileset = ImageIO.read(tilefile); tiles = new BufferedImage[7952]; int x = 0, y = 0; int w = tileset.getWidth() / tile.width; int h = tileset.getHeight() / tile.height; for (int i = 0; i < tiles.length; i++) { tiles[i] = new BufferedImage(tile.width, tile.height, BufferedImage.TYPE_INT_RGB); Graphics g = tiles[i].getGraphics(); int dx = 0, dy = 0, dx2 = tile.width, dy2 = tile.height; int sx = x * tile.width, sy = y * tile.width, sx2 = sx + dx2, sy2 = sy + dy2; g.drawImage(tileset, dx, dy, dx2, dy2, sx, sy, sx2, sy2, null); x++; if (x > w) { x = 0; y++; } ImageIO.write(tiles[i], "png", new File("D:/tiles/" + i + ".png")); } } catch (IOException ex) { ex.printStackTrace(); } } }