OutOfMemoryError con selección de imágenes en Android. ¿Cómo redimensionar la imagen antes de decodificarla a mapa de bits?
Estoy creando un selector de imagen en mi aplicación de Android, para la cual utilicécódigo de ejemplo en esta página. Básicamente, esto me da un botón que abre la posibilidad de obtener un archivo de la tarjeta SD, o uno al tomar una foto. Una vez que seleccioné una imagen, muestra la imagen usando un sencillo ImageView. En general, esto funciona perfectamente bien; Puedo seleccionar una imagen, luego hacer clic nuevamente en el botón Seleccionar imagen y seleccionar otra imagen. Hasta ahora todo bien ... con archivos pequeños eso es.
El problema comienza cuando uso "archivos más grandes"; Imágenes que simplemente tomé con la cámara incorporada del teléfono. Puedo seleccionar uno, y eso funciona bien. Cuando vuelvo a pulsar el botón Seleccionar imagen y selecciono otra imagen, obtengo un OutOfMemoryError en esta línea (línea 75 de la página enlazada a):
bitmap = BitmapFactory.decodeFile(path);
Mi dispositivo de prueba es bastante moderno (Galaxy S4 Mini), por lo que no debería ser el problema. Ya que necesito enviar la imagen como una cadena base64 a una API para la cual necesito cambiar su tamaño de todos modos, puedo cambiar el tamaño de la imagen usando algo como esto:
Bitmap yourBitmap;
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);
Pero desafortunadamente, para esto primero necesito decodificar el archivo, lo que en realidad causa el problema en primer lugar.
Así que mi pregunta es; ¿hay alguna manera de cambiar el tamaño de la imagen antes de decodificarla en un mapa de bits? Todos los consejos son bienvenidos!