Tengo un objeto que tiene muchas imágenes en búfer, quiero crear un nuevo objeto copiando todas las imágenes en búfer en el nuevo objeto, pero estas nuevas imágenes pueden modificarse y no quiero que las imágenes del objeto original se alteren alterando el imágenes de nuevos objetos.
¿Está claro?
¿Es posible hacer esto y alguien puede sugerir una buena manera de hacerlo, por favor? He pensado en getSubImage, pero leí en alguna parte que cualquier cambio en la subimagen se refleja en la imagen principal.
Solo quiero poder obtener una copia o clon nueva completamente separada de un BufferedImage
java
copy
clone
bufferedimage
f1wade
fuente
fuente
clone()
método? ¿O me he perdido algo? No sé mucho sobre laBufferedImage
claseBufferedImage
no se implementaCloneable
y elclone()
método tiene acceso protegido.Respuestas:
¿Algo como esto?
fuente
Hago esto:
Funciona bastante bien y es fácil de usar.
fuente
El procedimiento mencionado anteriormente falla cuando se aplica a subimágenes. Aquí hay una solución más completa:
fuente
Otra forma es usar la
Graphics2D
clase para dibujar la imagen en una nueva imagen en blanco. Esto realmente no clona la imagen, pero da como resultado una copia de la imagen que se produce.fuente
Class BufferedImage no implementa la interfaz Cloneable. Por tanto, el método de clonación no se anula. Aquí hay una alternativa para una técnica de copia profunda: Consejo 76 de Java: una alternativa a la técnica de copia profunda
fuente
Sé que esta pregunta es bastante antigua, pero para futuros visitantes, esta es la solución que usaría:
Por favor, corríjame si cambiar la que acaba de obtener
newImage
también afecta la imagen original de alguna manera.-> Javadoc para getScaledInstance
-> Javadoc para SCALE_DEFAULT (las otras constantes se enumeran justo debajo de esa)
fuente
Image
, noBufferedImage
.