2012-07-12 23 views
13

Tengo una imagen de 2448x3264 en mi tarjeta SD que consume 1,667,072 bytes pero cuando la cargo como un mapa de bits y calculo su tamaño usando getRowBytes()*getHeight() termino con 15,980,544 bytes.¿Por qué el tamaño del mapa de bits es más grande en la memoria que en el disco en Android?

¿Por qué sucede esto y cómo puedo calcular el tamaño real del archivo?

+0

¿Cuál es el formato de esta imagen? El formato –

+0

es jpeg. Creo que Devunwired respondió – Saqib

Respuesta

37

Esto se debe a que la imagen está comprimida cuando está en el disco (almacenada en formato JPG, PNG o similar). Una vez que carga la imagen en la memoria, ya no está comprimida y ocupa la cantidad de memoria necesaria para todos los píxeles (normalmente ancho * alto * 4 para RGBA_8888, o ancho * alto * 2 para RGB_565).

+0

bien, ahora lo entiendo. Solo para confirmar si comprime el mapa de bits utilizando bitmap.compress (formato Bitmap.CompressFormat, calidad int) a un FileOutputStream y leo el mapa de bits nuevamente, incluso entonces obtendrá el tamaño grande. ¿Derecha? – Saqib

+1

Correcto, una imagen comprimida es solo un formato de almacenamiento de archivos. Para trabajar realmente con los datos, se debe inflar de nuevo en un mapa de bits completo en la memoria. – Devunwired

+0

Tengo una img 1024 * 600 que se lee en mem en Android. Mis cálculos dicen 1024 * 600 * 4 = ~ 3 MB, mientras que DDMS me dice que tiene 4.2 MB en la memoria, ¿alguna idea de lo que causa la sobrecarga adicional? – Dori

Cuestiones relacionadas