Eu tenho um objeto que tem muitas imagens em buffer, quero criar um novo objeto copiando todas as imagens em buffer para o novo objeto, mas essas novas imagens podem ser alteradas e não quero que as imagens do objeto original sejam alteradas alterando o novas imagens de objetos.
está claro?
Isso é possível e alguém pode sugerir uma boa maneira de fazê-lo, por favor? Eu pensei em getSubImage, mas li em algum lugar que quaisquer alterações na subimagem são refletidas de volta na imagem pai.
Eu só quero ser capaz de obter uma cópia totalmente separada ou clone de um BufferedImage
java
copy
clone
bufferedimage
f1wade
fonte
fonte
clone()
método? Ou eu perdi alguma coisa? Não sei muito sobre aBufferedImage
aulaBufferedImage
não implementaCloneable
e oclone()
método tem acesso protegido.Respostas:
Algo assim?
fonte
Eu faço isso:
Funciona muito bem e é simples de usar.
fonte
O procedimento mencionado anteriormente falha quando aplicado a sub-imagens. Aqui está uma solução mais completa:
fonte
Outra maneira é usar a
Graphics2D
classe para desenhar a imagem em uma nova imagem em branco. Isso realmente não clona a imagem, mas resulta em uma cópia da imagem sendo produzida.fonte
A classe BufferedImage não implementa a interface clonável. Assim, o método do clone não é sobrescrito. Aqui está uma alternativa para uma técnica de cópia profunda: Java Dica 76: Uma alternativa para a técnica de cópia profunda
fonte
Eu sei que essa questão é muito antiga, mas para futuros visitantes, aqui está a solução que eu usaria:
Por favor, corrija-me se a alteração do recém-obtido
newImage
também afeta a imagem original de alguma forma.-> Javadoc para getScaledInstance
-> Javadoc para SCALE_DEFAULT (as outras constantes estão listadas logo abaixo dessa)
fonte
Image
, nãoBufferedImage
.