Есть две потенциально серьезные проблемы с основным ответом на этот вопрос. Во-первых, согласно документам:
публичный BufferedImage getSubimage (int x,
Int y,
Int W,
int h)
Возвращает подизображение, заданное указанной прямоугольной областью.
Возвращенный BufferedImage использует тот же массив данных, что и исходный
изображение.
По сути, это означает, что результат getSubimage действует как указатель, указывающий на подраздел исходного изображения.
Почему это важно? Что ж, если вы по какой-либо причине планируете редактировать подизображение, редактирование также произойдет с исходным изображением. Например, я столкнулся с этой проблемой, когда использовал маленькое изображение в отдельном окне, чтобы увеличить исходное изображение. (вроде как увеличительное стекло). Я сделал возможным инвертировать цвета, чтобы легче видеть определенные детали, но область, которая была «увеличена», также инвертировалась в исходном изображении! Таким образом, была небольшая часть исходного изображения, которая имела инвертированные цвета, в то время как остальная часть оставалась нормальной. Во многих случаях это не имеет значения, но если вы хотите отредактировать изображение или просто хотите получить копию обрезанного раздела, вы можете рассмотреть метод.
Что подводит нас ко второй проблеме. К счастью, это не такая большая проблема, как первая. getSubImage использует тот же массив данных, что и исходное изображение. Это означает, что все оригинальное изображение все еще сохраняется в памяти. Предполагая, что при «обрезании» изображения вам действительно нужно изображение меньшего размера, вам нужно будет перерисовать его как новое изображение, а не просто получить подизображение.
Попробуйте это:
BufferedImage img = image.getSubimage(startX, startY, endX, endY); //fill in the corners of the desired crop location here
BufferedImage copyOfImage = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = copyOfImage.createGraphics();
g.drawImage(img, 0, 0, null);
return copyOfImage; //or use it however you want
Этот метод сам даст вам обрезанное изображение, которое вы ищете, без ссылки на исходное изображение. Это сохранит целостность исходного изображения, а также сэкономит вам память на хранение большего изображения. (Если вы сделаете дамп исходного изображения позже)