Я не уверен, что полностью понимаю, о чем вы спрашиваете, но я думаю, , что вы хотите, выглядит примерно так:
Во-первых, обведите изображение в обоих измерениях.
Затем вычислите размер плитки (меньшее значение 128 и (размер изображения - начальная позиция)). Это сделано для того, чтобы убедиться, что вы не пытаетесь получить плитку за пределами. Если ваши изображения всегда кратны 128 в любом измерении, вы можете просто пропустить этот шаг и просто использовать 128 (просто убедитесь, что вы проверяете, что входные изображения соответствуют этому предположению).
Если вы хотите, чтобы плитки были точно128x128, вы также можете просто пропустить остаток, если размер плитки меньше 128x128, я не уверен, что ваше требование здесь. В любом случае, я оставлю это тебе. : -)
Наконец, получите образ этого размера и координат и сохраните в списке.
Код:
BufferedImage image = ...;
int tileSize = 128;
List<BufferedImage> tiles = new ArrayList<>();
for (int y = 0; y < image.height(); y += tileSize) {
int h = Math.min(tileSize, image.height() - y);
for (int x = 0; x < image.width(); x += tileSize) {
int w = Math.min(tileSize, image.width() - x);
tiles .add(image.getSubimage(x, y, w, h));
}
}