OutOfMemoryError mit Bildauswahl in Android. Wie kann ich die Bildgröße ändern, bevor ich es in eine Bitmap decodiere?

Ich baue in meiner Android App einen Imagepicker auf, für den ich den verwendet habeBeispielcode auf dieser Seite. Dies gibt mir im Grunde eine Schaltfläche, die die Möglichkeit eröffnet, eine Datei von der SD-Karte abzurufen oder eine durch Aufnehmen eines Bildes. Sobald ich ein Bild ausgewählt habe, wird es mithilfe einer einfachen ImageView angezeigt. Im Allgemeinen funktioniert dies einwandfrei; Ich kann ein Bild auswählen, dann erneut auf die Schaltfläche Bild auswählen klicken und ein anderes Bild auswählen. So weit so gut .. mit kleinen Dateien das ist.

Das Problem beginnt, wenn ich "größere Dateien" verwende; Bilder habe ich einfach mit der eingebauten Handykamera aufgenommen. Ich kann eine auswählen, und das funktioniert gut. Wenn ich erneut auf die Schaltfläche "Bild auswählen" drücke und ein anderes Bild auswähle, wird in dieser Zeile (Zeile 75 der verknüpften Seite) ein OutOfMemoryError angezeigt:

bitmap = BitmapFactory.decodeFile(path);

Mein Testgerät ist ziemlich modern (Galaxy S4 Mini), also sollte das nicht das Problem sein. Da ich das Bild als Base64-Zeichenfolge an eine API senden muss, für die ich die Größe ohnehin ändern muss, kann ich die Größe des Bildes folgendermaßen ändern:

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

Aber leider muss ich dazu erst die Datei dekodieren, was eigentlich das Problem überhaupt erst verursacht.

Meine Frage ist also: Gibt es eine Möglichkeit, die Größe des Bildes zu ändern, bevor ich es in eine Bitmap decodiere? Alle Tipps sind willkommen!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage