2012-02-20 14 views
17

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

10

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.

3

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.

+1

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

5

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

Cuestiones relacionadas