Saya ingin menetapkan tertentu Drawable
sebagai wallpaper perangkat, tetapi semua fungsi wallpaper Bitmap
hanya menerima . Saya tidak dapat menggunakan WallpaperManager
karena saya pra 2.1.
Juga, drawables saya diunduh dari web dan tidak tinggal di R.drawable
.
android
bitmap
wallpaper
android-drawable
rampok
sumber
sumber
Jawaban:
Sepotong kode ini membantu.
Di sini versi di mana gambar diunduh.
sumber
sumber
getIntrinsicWidth()
dangetIntrinsicHieght()
akan kembali -1 jika drawable adalah warna solid.Ini mengkonversi BitmapDrawable ke Bitmap.
sumber
BitmapDrawable
sebelum casting itu:if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); }
d
sudah merupakan suatuBitmapDrawable
, dalam hal itu sepele untuk mengambilnya sebagai bitmap ... Akan kecelakaan denganClassCastException
dalam semua kasus lain.A
Drawable
dapat ditarik keCanvas
, danCanvas
dapat didukung olehBitmap
:(Diperbarui untuk menangani konversi cepat untuk
BitmapDrawable
dan memastikan bahwa yangBitmap
dibuat memiliki ukuran yang valid)sumber
METODE 1 : Anda dapat langsung mengonversi ke bitmap seperti ini
METODE 2 : Anda bahkan dapat mengubah sumber daya menjadi drawable dan dari situ Anda bisa mendapatkan bitmap seperti ini
Untuk API> 22
getDrawable
metode dipindahkan keResourcesCompat
kelas sehingga untuk itu Anda melakukan sesuatu seperti inisumber
android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
sangat sederhana
sumber
Jadi setelah mencari (dan menggunakan) dari jawaban lain, tampaknya mereka semua menangani
ColorDrawable
danPaintDrawable
buruk. (Khususnya pada lollipop) sepertinyaShader
ada perubahan sehingga blok warna solid tidak ditangani dengan benar.Saya menggunakan kode berikut sekarang:
Tidak seperti yang lain, jika Anda memanggil
setBounds
padaDrawable
sebelum meminta untuk mengubahnya menjadi bitmap, itu akan menarik bitmap di ukuran yang benar!sumber
Drawable
tidak memiliki batas yang ditetapkan itu menggunakanIntrinsicWidth/Height
. Jika keduanya <= 0, kami mengatur kanvas ke 1px. Anda benar jikaDrawable
tidak memiliki batas itu akan melewati beberapa (1x1 adalah kebanyakan kasus), tetapi ini DIBUTUHKAN untuk hal-hal sepertiColorDrawable
yang TIDAK memiliki ukuran intrinsik. Jika kami tidak melakukan ini, itu akan melemparException
, Anda tidak dapat menggambar 0x0 ke kanvas.mutate()
akan membuat salinan meninggalkan gambar asli sendiri yang akan meniadakan masalah lewat kembali di batas asli. Saya jarang mengubah kode berdasarkan poin-poin itu. Jika use case Anda membutuhkannya tambahkan jawaban lain. Saya sarankan Anda membuat pertanyaan lain untuk penskalaan Bitmap.Mungkin ini akan membantu seseorang ...
Dari PictureDrawable ke Bitmap, gunakan:
... diimplementasikan seperti itu:
sumber
Drawable
, dalam hal ini aPictureDrawable
.Ini resolusi yang lebih baik
Kode dari Cara membaca bit yang dapat digambar sebagai InputStream
sumber
1) dapat ditarik ke Bitmap:
2) bitmap ke Drawable:
sumber
Berikut adalah versi Kotlin yang bagus dari jawaban yang diberikan oleh @ Chris.Jenkins di sini: https://stackoverflow.com/a/27543712/1016462
sumber
android-ktx memiliki
Drawable.toBitmap
metode: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.htmlDari Kotlin
sumber
VectorDrawable
di Kotlin! Juga dibagikan dalam pos SO ini di sini secara lebih rinci.Android menyediakan solusi foward non lurus:
BitmapDrawable
. Untuk mendapatkan Bitmap, kita harus memberikan id sumber dayaR.drawable.flower_pic
ke aBitmapDrawable
dan kemudian melemparkannya ke aBitmap
.sumber
Gunakan kode ini. Ini akan membantu Anda untuk mencapai tujuan Anda.
sumber
BitmapFactory.decodeResource()
secara otomatis skala bitmap, sehingga bitmap Anda mungkin berubah fuzzy. Untuk mencegah penskalaan, lakukan ini:atau
sumber
jika Anda menggunakan kotlin, gunakan kode di bawah ini. ini akan bekerja
// untuk menggunakan jalur gambar
sumber
Pustaka inti androidx terbaru (androidx.core: core-ktx: 1.2.0) sekarang memiliki fungsi ekstensi:
Drawable.toBitmap(...)
untuk mengonversi Drawable ke Bitmap.sumber
sumber
ImageWorker Library dapat mengonversi bitmap menjadi drawable atau base64 dan sebaliknya.
Penerapan
Dalam Gradle Tingkat Proyek
Di Tingkat Aplikasi Gradle
Anda juga dapat menyimpan dan mengambil gambar bitmap / drawables / base64 dari eksternal.
Periksa di sini. https://github.com/1AboveAll/ImageWorker/edit/master/README.md
sumber