У меня есть объект, в котором много буферизованных изображений, я хочу создать новый объект, копирующий все буферизованные изображения в новый объект, но эти новые изображения могут быть изменены, и я не хочу, чтобы исходные изображения объектов изменялись путем изменения новые изображения объектов.
это ясно?
Возможно ли это сделать, и может ли кто-нибудь предложить хороший способ сделать это, пожалуйста? Я подумал о getSubImage, но где-то читал, что любые изменения во вспомогательном изображении возвращаются обратно к родительскому изображению.
Я просто хочу получить новую, совершенно отдельную копию или клон BufferedImage.
java
copy
clone
bufferedimage
f1wade
источник
источник
clone()
метод? Или я что-то упустил? Я не очень разбираюсь вBufferedImage
классе,BufferedImage
не реализует,Cloneable
иclone()
метод имеет защищенный доступ.Ответы:
Что-то вроде этого?
источник
Я сделаю это:
Он работает довольно хорошо и прост в использовании.
источник
Ранее упомянутая процедура не выполняется при применении к вспомогательным изображениям. Вот более полное решение:
источник
Другой способ - использовать
Graphics2D
класс для рисования изображения на новом пустом изображении. На самом деле это не клонирует изображение, но приводит к созданию копии изображения.источник
Класс BufferedImage не реализует интерфейс Cloneable. Таким образом, метод клонирования не отменяется. Вот альтернатива технике глубокого копирования: Совет по Java 76: альтернатива технике глубокого копирования
источник
Я знаю, что этот вопрос довольно старый, но для будущих посетителей я бы использовал следующее решение:
Пожалуйста, поправьте меня, если изменение только что полученного
newImage
также каким-либо образом влияет на исходное изображение.-> Javadoc для getScaledInstance
-> Javadoc для SCALE_DEFAULT (остальные константы перечислены чуть ниже этого)
источник
Image
, неBufferedImage
.