Jak uzyskać obiekt Bitmap z Uri (jeśli uda mi się go zapisać w
/data/data/MYFOLDER/myimage.png
lub file///data/data/MYFOLDER/myimage.png
), aby użyć go w mojej aplikacji?
Czy ktoś ma pomysł, jak to osiągnąć?
android
uri
android-image
android-bitmap
ilredelweb
źródło
źródło
Odpowiedzi:
. . WAŻNE: Zobacz odpowiedź od @Mark Ingram poniżej i @pjv, aby uzyskać lepsze rozwiązanie. . .
Możesz spróbować:
Pamiętaj jednak, że ta metoda powinna być wywoływana tylko z wątku (nie z GUI). I AsyncTask.
źródło
Oto poprawny sposób:
Jeśli musisz załadować bardzo duże obrazy, poniższy kod załaduje je w kafelkach (unikając przydziałów dużej pamięci):
Zobacz odpowiedź tutaj
źródło
Oto poprawny sposób na zrobienie tego, z zachowaniem kontroli użycia pamięci:
Wywołanie getBitmap () z postu Marka Ingrama wywołuje również decodeStream (), więc nie tracisz żadnej funkcjonalności.
Bibliografia:
Android: Pobierz miniaturę obrazu na karcie SD, biorąc pod uwagę Uri oryginalnego obrazu
Obsługa dużych map bitowych
źródło
getPowerOfTwoForSampleRatio()
można pominąć. Zobacz: developer.android.com/reference/android/graphics/…i tak ścieżka musi mieć format podobny do tego
file:///mnt/sdcard/filename.jpg
źródło
To jest najłatwiejsze rozwiązanie:
źródło
źródło
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
Wygląda na to, że
MediaStore.Images.Media.getBitmap
był przestarzałyAPI 29
. Zalecanym sposobem jest użycie,ImageDecoder.createSource
które zostało dodaneAPI 28
.Oto jak można uzyskać bitmapę:
źródło
Możesz pobrać bitmapę z URI w ten sposób
źródło
źródło
Użyj metody startActivityForResult jak poniżej
I możesz uzyskać taki wynik:
źródło
Próbowałem na wiele sposobów. ta praca dla mnie idealnie.
Jeśli wybierzesz pictrue z galerii. Musisz być ostrożny w pobieraniu
Uri
zintent.clipdata
lubintent.data
, ponieważ jeden z nich może być pusty w innej wersji.źródło
możesz zrobić tę strukturę:
dzięki temu możesz łatwo przekonwertować URI na bitmapę. mam nadzieję, że ci pomogę
źródło
Wstawka z
getBitmap
którą depricated teraz używam następujące podejście w Kotlinźródło
źródło
(KOTLIN) Tak więc od 7 kwietnia 2020 r. Żadna z wyżej wymienionych opcji nie działała, ale oto, co zadziałało dla mnie:
Jeśli chcesz zapisać bitmapę w wartości i ustawić przy niej imageView, użyj tego:
val bitmap = BitmapFactory.decodeFile(currentPhotoPath).also { bitmap -> imageView.setImageBitmap(bitmap) }
Jeśli chcesz ustawić bitmapę na i imageView, użyj tego:
BitmapFactory.decodeFile(currentPhotoPath).also { bitmap -> imageView.setImageBitmap(bitmap) }
źródło
Pełna metoda pobierania obrazu z galerii mobilnej.
źródło