2012-03-24 13 views
6

Voglio scoprire la dimensione di un'immagine che si svolge in un array di byte in KBCome ottenere dimensioni di un'immagine che si svolge in un array di byte in 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(); 

I seguenti registri display a due risultati diversi per un'immagine che è 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 

che è il risultato corretto o come faccio ad ottenere il risultato corretto ?? Qualsiasi aiuto è apprezzato.

risposta

9

bm.getByteCount()/1024 // 942 è la dimensione originale della vostra immagine

baos.size()/1024 // 81 è la dimensione dopo che l'immagine è stata compressa

Il primo dà la dimensione del bitmap che rappresenta la risorsa immagine originale ma il prossimo due give la dimensione del flusso o la matrice di byte che rappresenta lo compresso. Quindi il primo restituisce un valore maggiore rispetto ai due successivi.

+0

come si spiega la dimensione diversa dalla dimensione effettiva dell'immagine. dovrebbe essere 11,7 KB ma restituisce qualcosa di diverso, come puoi vedere ... –

+1

11,7 KB è la dimensione del file compresso che hai aperto. Una volta caricato come Bitmap, le sue dimensioni non sono compresse, quindi le sue dimensioni sono proporzionali alla larghezza * altezza. Quindi stai comprimendo in JPEG con un fattore di compressione di 100 che risulta in una dimensione di 81. Questo è diverso rispetto all'originale probabilmente perché l'originale è stato compresso con una compressione di 60-80 anziché 100. – GuillermoMP

Problemi correlati