2013-11-28 15 views
6

Ich versuche, Bitmap-Größe mithilfe der Komprimierungsmethode zu reduzieren.Bitmap-Komprimierung ändert Bitmap-Byte-Größe nicht

Dies ist mein Code:

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; 
    } 

Wenn ich meine Protokolle überprüfen i erhalten:

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

Warum ist die Kompresse nicht funktioniert?

UPDATE:

ich diesen Code versucht:

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; 
    } 

immer noch die gleiche Byteanzahl

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

siehe Link follwing http://stackoverflow.com/questions/8417034/how-to-make-bitmap -compress-ohne-ändern-die-Bitmap-Größe – prakash

+1

Es ist nicht mein Problem. Ich möchte meine Bitmap nicht skalieren, nur um die Größe im Speicher zu reduzieren, indem ich quilaty ändere. – dasdasd

+2

Wurde für dieses Problem eine Lösung gefunden? Ich stehe hier genau dem gleichen Problem gegenüber. – Prateek

Antwort

1

Mit Bitmap.compress() Sie nur Komprimierungsalgorithmus angeben und durch die Die Art der Kompressionsoperation benötigt ziemlich viel Zeit. Wenn Sie mit Größen spielen müssen, um die Speicherzuweisung für Ihr Bild zu reduzieren, müssen Sie das Bild mit Bitmap.Options genau skalieren, Bitmap-Grenzen zunächst berechnen und dann auf die angegebene Größe dekodieren.

Das beste Beispiel, das ich auf StackOverflow gefunden habe, ist dieses. Strange out of memory issue while loading an image to a Bitmap object

+2

Ich möchte die Bitmap nicht skalieren, nur um die Qualität zu reduzieren. – dasdasd

4

Im Folgenden finden Sie den Code für die Verringerung der Bitmap-Größe und wandelt es 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

Danke für den Kommentar, aber ich habe bereits andere Lösung versucht, die Größe nicht ändern ... – dasdasd