2013-11-28 11 views
6

Próbuję zmniejszyć rozmiar bitmapy przy użyciu metody kompresji.Kompresja bitmapowa nie zmienia rozmiaru bitmapy bajtowej

To jest mój kod:

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

Kiedy sprawdzasz logi uzyskać:

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

Dlaczego kompres nie działa?

UPDATE:

Próbowałem ten kod:

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

wciąż ta sama liczba bajtów

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

patrz następujący link http://stackoverflow.com/questions/8417034/how-to-make-bitmap -kompresuj-bez-zmień-bitmapy-rozmiar – prakash

+1

To nie jest mój problem. Nie chcę przeskalować mojej bitmapy tylko po to, aby zmniejszyć rozmiar pamięci poprzez zmianę jest quilaty. – dasdasd

+2

Czy znaleziono rozwiązanie tego problemu? Mam tu do czynienia z tym samym problemem. – Prateek

Odpowiedz

1

Korzystanie Bitmap.compress() po prostu podać algorytmu kompresji i przez sposób działania kompresji zajmuje dość dużo czasu. Jeśli potrzebujesz grać z rozmiarami w celu zmniejszenia alokacji pamięci dla obrazu, musisz dokładnie skalować obraz za pomocą Bitmap.Options, najpierw obliczając granice bitmapy, a następnie dekodować go do określonego rozmiaru.

Najlepszą próbką, którą znalazłem w StackOverflow, jest ta. Strange out of memory issue while loading an image to a Bitmap object

+2

Nie chcę skalować bitmapy tylko po to, aby zmniejszyć jej jakość. – dasdasd

4

Poniżej znajduje się kod do zmniejszania rozmiaru mapy bitowej i przekształcić ją w 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

Dzięki za komentarz, ale już wypróbowałem inne rozwiązanie, które nie zmienia rozmiaru ... – dasdasd

Powiązane problemy