Saya memiliki objek yang memiliki banyak gambar buffer di dalamnya, saya ingin membuat objek baru yang menyalin semua gambar yang di-buffer ke dalam objek baru, tetapi gambar baru ini dapat diubah dan saya tidak ingin gambar objek asli diubah dengan mengubah gambar objek baru.
Apakah itu jelas?
Apakah ini mungkin untuk dilakukan dan adakah yang bisa menyarankan cara yang baik untuk melakukannya? Saya telah memikirkan getSubImage tetapi membaca bahwa setiap perubahan pada subimage terkait kembali ke gambar induk.
Saya hanya ingin mendapatkan salinan baru yang sepenuhnya terpisah atau klon dari BufferedImage
java
copy
clone
bufferedimage
f1wade
sumber
sumber
clone()
metode ini? Atau apakah saya melewatkan sesuatu? Saya tidak tahu banyak tentangBufferedImage
kelasBufferedImage
tidak diimplementasikanCloneable
danclone()
metode ini memiliki akses yang dilindungi.Jawaban:
Sesuatu seperti ini?
sumber
Saya melakukan ini:
Ini bekerja dengan cukup baik dan mudah digunakan.
sumber
Prosedur yang disebutkan sebelumnya gagal saat diterapkan ke sub gambar. Berikut solusi yang lebih lengkap:
sumber
Cara lain adalah menggunakan
Graphics2D
kelas untuk menggambar gambar ke gambar kosong baru. Ini tidak benar-benar mengkloning gambar, tetapi menghasilkan salinan gambar yang diproduksi.sumber
Class BufferedImage tidak mengimplementasikan antarmuka Cloneable. Dengan demikian, metode klon tidak diganti. Berikut adalah alternatif untuk teknik deep copy: Java Tip 76: Alternatif untuk teknik deep copy
sumber
Saya tahu bahwa pertanyaan ini cukup lama, tetapi untuk pengunjung mendatang, inilah solusi yang akan saya gunakan:
Harap perbaiki saya jika mengubah yang baru saja diperoleh
newImage
juga memengaruhi gambar asli dengan cara apa pun.-> Javadoc untuk getScaledInstance
-> Javadoc untuk SCALE_DEFAULT (konstanta lain dicantumkan tepat di bawah yang satu itu)
sumber
Image
, bukanBufferedImage
.