Chciałbym ustawić Drawable
jako tapetę urządzenia, ale wszystkie funkcje tapet akceptują Bitmap
tylko s. Nie mogę użyć, WallpaperManager
ponieważ mam wersję 2.1.
Ponadto moje drawable są pobierane z sieci i nie są w nim przechowywane R.drawable
.
android
bitmap
wallpaper
android-drawable
Obrabować
źródło
źródło
Odpowiedzi:
Ten fragment kodu pomaga.
Tutaj wersja, w której obraz jest pobierany.
źródło
źródło
getIntrinsicWidth()
igetIntrinsicHieght()
zwróci -1, jeśli ciągnienie ma jednolity kolor.Konwertuje to BitmapDrawable na Bitmap.
źródło
BitmapDrawable
przed przesłaniem:if (d instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); }
d
już jestBitmapDrawable
, w tym przypadku jest to trywialne, aby pobrać je jako bitmapy ... rozbije sięClassCastException
we wszystkich innych przypadkach.A
Drawable
może zostać narysowane na aCanvas
, aCanvas
może być poparte przezBitmap
:(Zaktualizowano w celu obsługi szybkiej konwersji dla
BitmapDrawable
s i zapewnienia, żeBitmap
utworzony ma prawidłowy rozmiar)źródło
METODA 1 : Możesz bezpośrednio przekonwertować na bitmapę w ten sposób
METODA 2 : Możesz nawet przekonwertować zasób na drawable i dzięki temu możesz uzyskać bitmapę w ten sposób
Dla API> 22
getDrawable
metoda została przeniesiona doResourcesCompat
klasy, więc w tym celu wykonaj coś takiegoźródło
android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
bardzo prosta
źródło
Więc po obejrzeniu (i korzystania) z innych odpowiedzi, wydaje się, że wszystko manipulacja
ColorDrawable
iPaintDrawable
źle. (Zwłaszcza na Lollipop) wydawało się, żeShader
zostały poprawione, więc stałe bloki kolorów nie były obsługiwane poprawnie.Używam teraz następującego kodu:
W przeciwieństwie do innych, jeśli zadzwonisz
setBounds
naDrawable
przed prosząc, aby włączyć go do bitmapy, to narysować bitmapę w odpowiednim rozmiarze!źródło
Drawable
nie ma ustawionych granic, używaIntrinsicWidth/Height
. Jeśli oba mają wartość <= 0, ustawiamy płótno na 1px. Masz rację, jeśliDrawable
nie ma granic, to minie trochę (1x1 jest w większości przypadków), ale WYMAGANE jest to dla rzeczy takich,ColorDrawable
które NIE mają wewnętrznych rozmiarów. Gdybyśmy tego nie zrobili, wyrzuciłoby toException
, nie można narysować 0x0 na kanwie.mutate()
tworzyłby kopię, pozostawiając oryginalny rysunkowy sam, co negowałoby problem powrotu do pierwotnych granic. Rzadko zmieniam kod na podstawie tych punktów. Jeśli wymaga tego przypadek użycia, dodaj inną odpowiedź. Sugeruję, aby utworzyć kolejne pytanie dotyczące skalowania mapy bitowej.Może to pomoże komuś ...
Od PictureDrawable do Bitmap, użyj:
... wdrożony jako taki:
źródło
Drawable
, w tym przypadku aPictureDrawable
.Oto lepsza rozdzielczość
Kod z Jak czytać bity ciągnące jako InputStream
źródło
1) Drawable to Bitmap:
2) bitmapa na Drawable:
źródło
Oto ładna wersja odpowiedzi Kotlin podana przez @ Chris.Jenkins tutaj: https://stackoverflow.com/a/27543712/1016462
źródło
Android zapewnia non czysty roztwór przewin:
BitmapDrawable
. Aby uzyskać mapę bitową, będziemy musieli podać identyfikator zasobuR.drawable.flower_pic
na a,BitmapDrawable
a następnie rzutować na aBitmap
.źródło
Android-ktx ma
Drawable.toBitmap
metodę: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.htmlZ Kotlina
źródło
VectorDrawable
Kotlina! Udostępniono również w tym poście SO tutaj bardziej szczegółowo.Użyj tego kodu. Pomoże ci to osiągnąć cel.
źródło
BitmapFactory.decodeResource()
automatycznie skaluje bitmapę, więc mapa może być rozmyta. Aby zapobiec skalowaniu, wykonaj następujące czynności:lub
źródło
jeśli używasz kotlin, użyj poniższego kodu. to zadziała
// do używania ścieżki obrazu
źródło
Najnowsza biblioteka rdzenia Androidx (androidx.core: core-ktx: 1.2.0) ma teraz funkcję rozszerzenia:
Drawable.toBitmap(...)
do konwersji Drawable na mapę bitową.źródło
źródło
ImageWorker Library może konwertować bitmapę na drawable lub base64 i odwrotnie.
Realizacja
W gradacji poziomu projektu
W gradacji poziomu aplikacji
Możesz także przechowywać i pobierać obrazy bitmapowe / rysunkowe / base64 z zewnętrznych.
Sprawdź tutaj. https://github.com/1AboveAll/ImageWorker/edit/master/README.md
źródło