Ich habe ein Objekt, das viele gepufferte Bilder enthält. Ich möchte ein neues Objekt erstellen, das alle gepufferten Bilder in das neue Objekt kopiert. Diese neuen Bilder können jedoch geändert werden, und ich möchte nicht, dass die ursprünglichen Objektbilder durch Ändern des geändert werden neue Objekte Bilder.
Ist das klar?
Ist dies möglich und kann jemand bitte einen guten Weg vorschlagen, dies zu tun? Ich habe an getSubImage gedacht, aber irgendwo gelesen, dass alle Änderungen am Unterbild wieder auf das übergeordnete Bild übertragen werden.
Ich möchte nur in der Lage sein, eine neue, vollständig separate Kopie oder einen Klon eines BufferedImage zu erhalten
java
copy
clone
bufferedimage
f1wade
quelle
quelle
clone()
Methode nicht aufrufen ? Oder habe ich etwas verpasst? Ich weiß nicht viel über dieBufferedImage
KlasseBufferedImage
nicht implementiertCloneable
und dieclone()
Methode hat geschützten Zugriff.Antworten:
Etwas wie das?
quelle
Ich mache das:
Es funktioniert ziemlich gut und ist einfach zu bedienen.
quelle
Das zuvor erwähnte Verfahren schlägt fehl, wenn es auf Teilbilder angewendet wird. Hier ist eine vollständigere Lösung:
quelle
Eine weitere Möglichkeit ist es, die verwenden
Graphics2D
Klasse das Bild auf ein neues leeres Bild zu zeichnen. Dadurch wird das Bild nicht wirklich geklont, es wird jedoch eine Kopie des Bildes erstellt.quelle
Die Klasse BufferedImage implementiert die klonbare Schnittstelle nicht. Somit wird die Klonmethode nicht überschrieben. Hier ist eine Alternative für eine Deep Copy-Technik: Java-Tipp 76: Eine Alternative zur Deep Copy-Technik
quelle
Ich weiß, dass diese Frage ziemlich alt ist, aber für zukünftige Besucher ist hier die Lösung, die ich verwenden würde:
Bitte korrigieren Sie mich, wenn sich das Ändern des gerade erhaltenen
newImage
Bildes in irgendeiner Weise auch auf das Originalbild auswirkt.-> Javadoc für getScaledInstance
-> Javadoc für SCALE_DEFAULT (die anderen Konstanten sind direkt darunter aufgeführt)
quelle
Image
, nichtBufferedImage
.