code: public static BufferedImage[] splitImage(BufferedImage image, int h, int v)
      {
          final int width = image.getWidth() / h;
          final int height = image.getHeight() / v;
          final int transparency = image.getColorModel().getTransparency();
          final BufferedImage[] images = new BufferedImage[h * v];
          int frame = 0;
  
          for (int y = 0; y < v; y++)
          {
              for (int x = 0; x < h; x++)
              {
                  images[frame] = createImage(width, height, transparency);
                  final Graphics2D g = images[frame].createGraphics();
                  optimizeGraphicsSpeed(g);
                  g.drawImage(image, 0, 0, width, height, x * width, y * height, (x + 1) * width, (y + 1) * height, null);
                  g.dispose();
                  frame++;
              }
          }
  
          return images;
      }
docs: Split an image into an array of sub image.
  
  @param image The image to split.
  @param h The number of horizontal divisions (strictly positive).
  @param v The number of vertical divisions (strictly positive).
  @return The splited images array (can not be empty).