Dalam aktivitas saya, saya membuat Bitmap
objek dan kemudian saya harus meluncurkan yang lain Activity
, Bagaimana saya bisa melewatkan Bitmap
objek ini dari sub-aktivitas (yang akan diluncurkan)?
java
android
bitmap
parcelable
michael
sumber
sumber
URI
atauResourceID
bitmap dan bukan bitmap itu sendiri. Melewati seluruh bitmap membutuhkan banyak memori. Melewati URL membutuhkan sedikit memori dan memungkinkan setiap aktivitas memuat dan menskalakan bitmap sesuai kebutuhan.Sebenarnya, melewatkan bitmap sebagai Parcelable akan menghasilkan kesalahan "JAVA BINDER FAILURE". Coba lewati bitmap sebagai array byte dan buat untuk ditampilkan di aktivitas selanjutnya.
Saya membagikan solusi saya di sini:
bagaimana Anda mengirimkan gambar (bitmap) antara aktivitas Android menggunakan bundel?
sumber
Melewati bitmap sebagai parceable dalam bundel di antara aktivitas bukanlah ide yang baik karena batasan ukuran Parceable (1mb). Anda dapat menyimpan bitmap dalam file di penyimpanan internal dan mengambil bitmap yang disimpan dalam beberapa aktivitas. Ini beberapa contoh kode.
Untuk menyimpan bitmap dalam file myImage di penyimpanan internal:
Kemudian pada aktivitas selanjutnya Anda dapat mendekode file myImage ke bitmap menggunakan kode berikut:
Catatan Banyak memeriksa null dan menskalakan bitmap dihentikan.
sumber
openFileOutput
.Jika gambar terlalu besar dan Anda tidak dapat menyimpan & memuatnya ke penyimpanan, Anda harus mempertimbangkan hanya menggunakan referensi statis global ke bitmap (di dalam aktivitas penerima), yang akan diatur ulang ke nol pada onDestory, hanya jika "isChangingConfigurations" mengembalikan true.
sumber
Karena Intent memiliki batas ukuran. Saya menggunakan objek statis publik untuk melakukan pass bitmap dari layanan ke siaran ....
lulus dalam layanan saya
BroadcastReceiver saya
sumber
Kompres dan Kirim
Bitmap
Jawaban yang diterima akan macet ketika
Bitmap
terlalu besar. Saya percaya ini adalah batas 1MB . TheBitmap
harus dikompresi ke dalam format file yang berbeda seperti JPG diwakili olehByteArray
, maka dapat dengan aman melewati melaluiIntent
.Penerapan
Fungsi ini terkandung dalam utas terpisah menggunakan Kotlin Coroutines karena
Bitmap
kompresi dirantai setelahBitmap
dibuat dari urlString
. TheBitmap
penciptaan membutuhkan thread terpisah untuk menghindari Aplikasi Tidak Menanggapi (PPA) kesalahan.Konsep yang Digunakan
toBitmap()
adalah fungsi ekstensi Kotlin yang membutuhkan pustaka yang akan ditambahkan ke dependensi aplikasi.Kode
1. Kompres
Bitmap
ke JPGByteArray
setelah itu dibuat.Repository.kt
LihatModel.kt
2. Lulus gambar
ByteArray
melaluiIntent
.Dalam sampel ini, ini diteruskan dari Fragmen ke Layanan . Itu adalah konsep yang sama jika dibagikan di antara dua Kegiatan .
Fragment.kt
3. Konversi
ByteArray
kembali keBitmap
.Utils.kt
sumber
Mungkin terlambat tetapi bisa membantu. Pada fragmen atau aktivitas pertama, deklarasikan sebuah kelas ... misalnya
Kemudian pada kelas kedua / fragmen lakukan ini ..
Semoga ini bisa membantu.
sumber
Semua solusi di atas tidak bekerja untuk saya, Mengirim bitmap
parceableByteArray
juga menghasilkan kesalahanandroid.os.TransactionTooLargeException: data parcel size
.Larutan
putExtra(String)
sebagaisumber
Anda dapat membuat transfer bitmap. coba ini....
Di kelas pertama:
1) Buat:
2) Buat pengambil dan penyetel
3) Atur gambar:
Kemudian, di kelas kedua:
sumber
Dalam kasus saya, cara yang disebutkan di atas tidak berhasil untuk saya. Setiap kali saya menaruh bitmap dalam maksud, aktivitas ke-2 tidak dimulai. Hal yang sama terjadi ketika saya melewati bitmap sebagai byte [].
Saya mengikuti tautan ini dan itu bekerja seperti pesona dan sangat cepat:
dalam kegiatan pertama saya:
dan ini adalah onCreate () dari Aktivitas ke-2 saya:
sumber
CommonResources.photoFinishBitmap
bukanConstants.photoFinishBitmap
.