Mam obiekt, który ma wiele buforowanych obrazów, chcę utworzyć nowy obiekt, kopiując wszystkie buforowane obrazy do nowego obiektu, ale te nowe obrazy mogą zostać zmienione i nie chcę, aby oryginalne obrazy obiektów były zmieniane przez zmianę nowe obrazy obiektów.
czy to jasne?
Czy jest to możliwe i czy ktoś może zasugerować dobry sposób, aby to zrobić? Pomyślałem o getSubImage, ale gdzieś przeczytałem, że wszelkie zmiany w podobrazie są przenoszone z powrotem do obrazu nadrzędnego.
Chcę tylko mieć możliwość uzyskania świeżej, całkowicie oddzielnej kopii lub klonu BufferedImage
java
copy
clone
bufferedimage
f1wade
źródło
źródło
clone()
metody? A może coś przegapiłem? Nie wiem zbyt wiele oBufferedImage
klasieBufferedImage
nie implementuje,Cloneable
aclone()
metoda ma chroniony dostęp.Odpowiedzi:
Coś takiego?
źródło
Robię to:
Działa dość dobrze i jest prosty w użyciu.
źródło
Wspomniana wcześniej procedura kończy się niepowodzeniem w przypadku zastosowania do obrazów podrzędnych. Oto bardziej kompletne rozwiązanie:
źródło
Innym sposobem jest użycie
Graphics2D
klasy do narysowania obrazu na nowym pustym obrazie. To tak naprawdę nie klonuje obrazu, ale skutkuje utworzeniem kopii obrazu.źródło
Klasa BufferedImage nie implementuje interfejsu Cloneable. W związku z tym metoda klonowania nie jest zastępowana. Oto alternatywa dla techniki głębokiego kopiowania: Java Tip 76: Alternatywa dla techniki głębokiego kopiowania
źródło
Wiem, że to pytanie jest dość stare, ale dla przyszłych odwiedzających, oto rozwiązanie, którego użyłbym:
Proszę poprawić mnie, jeśli zmiana właśnie uzyskanego
newImage
wpływa w jakikolwiek sposób na oryginalny obraz.-> Javadoc dla getScaledInstance
-> Javadoc dla SCALE_DEFAULT (pozostałe stałe są wymienione tuż pod tą)
źródło
Image
, a nieBufferedImage
.