Мое первоначальное предположение, что ваш (x + w) > image.getWidth()
.
Если вы распечатываете image.getWidth (), это 3264? : O
То, что вы сейчас делаете, это:
<-- 3264 ------>
+--------------+
| orig | +-- Causing the problem
| | V
| +--------------+
|100| overlap | |
| | | |
| | | |
+---|----------+ |
| |
| out |
+--------------+
Если вы пытаетесь обрезать верхний угол оригинала и просто получить «перекрытие», тогда вам нужно сделать
BufferedImage out = image.getSubimage(x, y, w-x, h-y);
Если вы пытаетесь это сделать:
+------------------+
| |
| +-----------+ |
| | | |
| | | |
| | | |
| | | |
| +-----------+ |
| |
+------------------+
Тогда вам нужно сделать это:
BufferedImage out = image.getSubimage(x, y, w-2*x, h-2*y);