OutOfMemoryError z wyborem obrazów w Androidzie. Jak zmienić rozmiar obrazu przed dekodowaniem go do mapy bitowej?

Buduję imagepicker w mojej aplikacji na Androida, dla której użyłemprzykładowy kod na tej stronie. Daje mi to w zasadzie przycisk, który otwiera możliwość pobrania pliku z karty SD lub jednego przez zrobienie zdjęcia. Po wybraniu obrazu wyświetla obraz za pomocą prostego ImageView. Ogólnie rzecz biorąc, działa to doskonale; Mogę wybrać obraz, a następnie ponownie kliknąć przycisk Wybierz obraz i wybrać inny obraz. Do tej pory tak dobrze .. z małymi plikami.

Problem zaczyna się, gdy używam „większych plików”; zdjęcia, które zrobiłem po prostu za pomocą wbudowanego aparatu telefonicznego. Mogę wybrać jedną, która działa dobrze. Kiedy ponownie nacisnę przycisk wyboru obrazu i wybiorę inny obraz, otrzymuję OutOfMemoryError w tej linii (linia 75 połączonej ze stroną):

bitmap = BitmapFactory.decodeFile(path);

Moje urządzenie testowe jest dość nowoczesne (Galaxy S4 Mini), więc nie powinno być problemu. Ponieważ muszę wysłać obraz jako ciąg base64 do interfejsu API, dla którego muszę go zmienić, mogę zmienić rozmiar obrazu, używając czegoś takiego:

Bitmap yourBitmap;
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);

Ale niestety, najpierw muszę zdekodować plik, co w pierwszej kolejności powoduje problem.

Więc moje pytanie jest; Czy istnieje sposób, aby zmienić rozmiar obrazu, zanim zdekoduję go na mapę bitową? Wszystkie wskazówki są mile widziane!

questionAnswers(5)

yourAnswerToTheQuestion