Quiero decodificar una imagen de la tarjeta SD con BitmapFactory.decodeFile (ruta, opciones).
También quiero que las imágenes que son más grandes que 2048x2048 píxeles se reduzcan a 2048x2048 como máximo (manteniendo las proporciones).
Podría hacerlo manualmente después de obtener el mapa de bits, pero eso requeriría asignar una gran cantidad de bytes además de los asignados.
¿Cómo debo configurar mi objeto BitmapFactory.Options para obtener ese efecto?
GraciasAndroid cómo escalar una imagen con las opciones de BitmapFactory
Respuesta
Use BitmapFactory.Options.inSampleSize cuando carga su imagen por primera vez para obtener el tamaño más cercano posible a su tamaño objetivo, luego use Bitmap.createScaledBitmap
para escalar al tamaño exacto que desee.
Hay un código para esto en this answer.
Puede probar algo como esto:
int imageWidth, imageHeight;
Bitmap result = Bitmap.createScaledBitmap(bitmapPicture,
imageWidth, imageHeight, false);
Aquí puede añadir su anchura y altura. bitmapPicture
es el objeto de Bitmap
. Avíseme si esto le puede ayudar.
Comience configurando inJustDecodeBounds
en true
en su Options
, esto le dará el tamaño de la imagen, sin cargar ninguno de los datos de la imagen.
Si el tamaño de la imagen es menor que su tamaño máximo, simplemente cárguelo como de costumbre.
Si, por otro lado, es demasiado grande, use inSampleSize
para leer un mapa de bits más pequeño.
Nota: no creo que la decodificación hace ningún tipo de filtrado cuando se utiliza el inSampleSize, por lo que es posible que pierda algún detalle, pero a medida que el tamaño de la imagen es tan grande (2048 px) no creo que esto causa cualquier problema
- 1. JSP ¿Cómo escalar una imagen?
- 2. Escalar una imagen en GTK
- 3. Escalar una imagen en GWT
- 4. BitmapFactory devuelve una imagen más grande que la fuente
- 5. Imagen de descarga de Android del servidor y guardar en sdcard sin utilizar BitmapFactory
- 6. escalar una imagen, pero mantener sus proporciones
- 7. Cómo escalar píxeles en una imagen para ajustar el brillo?
- 8. escalar con las líneas de gama
- 9. Cómo escalar una imagen en iOS, suavizada pero no suave?
- 10. ¿Cómo escalar una imagen a pantalla completa usando JavaScript?
- 11. ¿Cómo escalar con ESPer?
- 12. ¿Android admite escalar video?
- 13. ¿Puedo escalar una vista en Android?
- 14. Manejar opciones complejas con las opciones de programa de Boost
- 15. Cómo escalar una imagen en ImageView para mantener la relación de aspecto
- 16. Cómo escalar correctamente un juego en Android
- 17. ¿Cómo cargar una imagen de los activos?
- 18. Botón con texto Y una imagen (Android)
- 19. BitmapFactory OOM me está volviendo loco
- 20. PIL cómo escalar el tamaño del texto en relación con el tamaño de la imagen
- 21. Cómo escalar píxeles en pantalla?
- 22. ¿Cómo cambiar las opciones de <select> con jQuery?
- 23. Escalar varias rutas con raphael
- 24. ¿Cómo obtener metadatos de una imagen?
- 25. Cómo escalar glDrawPixels?
- 26. ¿Cómo trabajar con una imagen usando la url en Android?
- 27. Wicket, ¿cómo cargar las opciones de DropDown con un clic?
- 28. Establecer las dimensiones de UIImagePickerController "mover y escalar" cropbox
- 29. ¿Cómo escalar MySQL con múltiples máquinas?
- 30. cómo escalar alturas matplotlib subparcelas individual
Como dije, estoy tratando de evitar tener que asignar otros 2048x2048 píxeles, pero hago que BitmapFactory haga esto automáticamente, porque tengo muy poca memoria. Su método solo asigna un nuevo mapa de bits que no es lo que quiero. Gracias por la respuesta. – saarraz1