2011-09-09 16 views
7

Hola, estoy creando un mapa de bits a partir de una imagen png llamada image.png. La imagen tiene la dimensión 75 (ancho) x 92 (alto). Cuando ejecuto este código:BitmapFactory devuelve una imagen más grande que la fuente

Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image 
Log.d("image", "height: " + bitmap.getHeight() + " width: " + bitmap.getWidth()); 

los registros del registrador:

DEBUG/image(3550): height: 138 width: 113 

y la imagen en la pantalla es más grande que otras imágenes que tienen la dimensión de 75 x 92. ¿Qué puedo hacer para que el androide cargar la imagen con la dimensión correcta?

+0

se puede obtener la altura y la anchura() de la estirable en tiempo de ejecución, en su código? – user370305

Respuesta

11

Parece que la densidad de su pantalla en su dispositivo es diferente a la densidad donde se creó image.png.

Si realmente desea evitar que la escala, puede probar uno de los siguientes:

  1. poner la imagen en res/dibujable-nodpi (http://developer.android.com/guide/practices/screens_support.html#qualifiers)

  2. Uso ImageView.ScaleType. CENTRO (http://developer.android.com/reference/android/widget/ImageView.ScaleType.html)

  3. acaba de encontrar esta pregunta relacionada sobre SO: Android: How to stop Android 1.6+ from scaling images

+0

El primero no afecta nada, el tercero es válido para las imágenes de la web (ya lo estoy usando) y el segundo es la solución. Muchas gracias –

+1

"Poner la imagen en res/drawable-nodpi" Esto funciona perfecto para mí usando opciones.OutWidth & options.OutHeight –

3

Beause loader en BitmapFactory aplica escala de densidad de pantalla durante la carga. Para anular esto, proporcione la deseada inTargetDensity deseada en BitmapFactory.Options en invocar a decodeResource.

+0

Encontré esas opciones, pero quiero que la imagen se cargue correctamente en todos los dispositivos, no solo para una densidad –

+0

Supongo que quieres cargar el tamaño de píxel original en cualquier dispositivo, ¿verdad? Si su imagen está en la carpeta de recursos dibujables, establezca enTargetDensity = 160, que es la densidad de recursos en la carpeta dibujable, y no se producirá ninguna escala durante la carga. De lo contrario, la respuesta correcta puede depender de lo que quiere decir con "dimensión correcta" ... –

+0

Los valores de densidad predeterminados de varias carpetas de res dibujables se documentan aquí: http://developer.android.com/guide/practices/screens_support.html –

18

Mi solución:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inScaled = false;    
Bitmap bitmap = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.image, options); 
Cuestiones relacionadas