2012-03-24 16 views
6

Quiero averiguar el tamaño de una imagen que se llevó a cabo en una matriz de bytes en KBCómo obtener el tamaño de una imagen que se mantiene en una matriz de bytes en KB

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.mPicture); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object 
byte[] b = baos.toByteArray(); 

Los siguientes registros de pantalla de dos resultados diferentes para una imagen que es 11.7kb:

Log.d(TAG, "bm size: " + bm.getByteCount()/1024); // 942 
Log.d(TAG, "baos size: " + baos.size()/1024); // 81 
Log.d(TAG, "byte size: " + b.length/1024); // 81 

que es el resultado correcto o cómo puedo obtener el resultado correcto ?? Cualquier ayuda es apreciada.

Respuesta

9

bm.getByteCount()/1024 // 942 es el tamaño original de la imagen

baos.size()/1024 // 81 es el tamaño después de que la imagen se ha comprimido

El primero da el tamaño del mapa de bits que representa el recurso imagen original pero los dos siguientes dan el tamaño de la secuencia o el conjunto de bytes que representa el comprimido uno. Entonces, el primero devuelve un valor mayor que los siguientes dos.

+0

cómo explicas que el tamaño sea diferente al tamaño real de la imagen. se supone que es 11.7KB pero devuelve algo diferente como puede ver ... –

+1

11.7KB es el tamaño del archivo comprimido que ha abierto. Una vez que se carga como un mapa de bits, su tamaño no se comprime, por lo que su tamaño es proporcional al ancho * alto. Luego está comprimiendo a JPEG con un factor de compresión de 100, que da como resultado un tamaño de 81. Esto es diferente del original, probablemente porque el original se comprimió con una compresión de 60-80 en lugar de 100. – GuillermoMP

Cuestiones relacionadas