2013-11-28 8 views
6

Sto provando a ridurre le dimensioni bitmap utilizzando il metodo compress.La compressione bitmap non modifica la dimensione byte bitmap

Questo è il mio codice:

public Bitmap compressImage(Bitmap image) { 
     Bitmap immagex = image; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     Log.i("before compress", immagex.getByteCount()+""); 

     boolean compress = immagex.compress(Bitmap.CompressFormat.JPEG, 10, baos); 

     if(compress) 
      Log.i("after compress", immagex.getByteCount()+""); 
     else 
      Log.i("bad compress", "bad compress"); 

     return immagex; 
    } 

Quando controllo miei log ottengo:

11-28 11:10:38.252: I/before compress(2429): 374544 
11-28 11:10:38.262: I/after compress(2429): 374544 

Perché l'impacco non funziona?

UPDATE:

ho provato questo codice:

public Bitmap compressImage(Bitmap image) { 
     Bitmap immagex = image; 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     Log.i("before compress", immagex.getByteCount()+""); 

     boolean compress = immagex.compress(Bitmap.CompressFormat.JPEG, 10, baos); 

     Log.i("after compress 2", decodeSampledBitmapFromByte(image.getWidth(), image.getHeight(), baos.toByteArray()).getByteCount()+""); 

     return immagex; 
    } 

Sempre lo stesso numero di byte

11-28 11:33:04.335: I/before compress(3472): 374544 
11-28 11:33:04.395: I/after compress 2(3472): 374544 
+0

consultare follwing collegamento http://stackoverflow.com/questions/8417034/how-to-make-bitmap -compress-senza-change-the-bitmap-size – prakash

+1

Non è il mio problema. Non voglio ridimensionare la mia bitmap solo per ridurre la dimensione in memoria cambiando è quilaty. – dasdasd

+2

È stata trovata una soluzione per questo problema? Sto affrontando lo stesso problema qui. – Prateek

risposta

1

Utilizzando Bitmap.compress() basta specificare algoritmo di compressione e dal l'operazione di compressione dei modi richiede una quantità di tempo piuttosto lunga. Se hai bisogno di giocare con le dimensioni per ridurre l'allocazione di memoria per la tua immagine, hai esattamente bisogno di ridimensionare l'immagine usando Bitmap.Options, prima calcolando i limiti della bitmap e poi decodificandola alla tua dimensione specificata.

Il campione migliore che ho trovato su StackOverflow è questo. Strange out of memory issue while loading an image to a Bitmap object

+2

Non voglio ridimensionare la bitmap solo per ridurre la qualità. – dasdasd

4

seguito è il codice per ridurre la dimensione bitmap e convertirlo in Base64,

Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, true); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    newBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] byteArray = baos.toByteArray(); 
    String imageEncoded = Base64.encodeToString(byteArray, Base64.DEFAULT); 

    Log.e("Base 64 String", imageEncoded); 
+0

Grazie per il commento ma ho già provato altra soluzione che non uso cambiando dimensione ... – dasdasd