2013-11-28 19 views
6

Tôi đang cố gắng giảm kích thước bitmap bằng cách sử dụng phương pháp nén.Nén bitmap không thay đổi kích thước byte bitmap

Đây là mã của tôi:

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

Khi tôi kiểm tra các bản ghi của tôi tôi nhận được:

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

Tại sao nén không hoạt động?

UPDATE:

Tôi đã thử mã này:

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

Tuy nhiên số lượng byte cùng

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

vui lòng tham khảo follwing liên kết http://stackoverflow.com/questions/8417034/how-to-make-bitmap -compress-without-change-the-bitmap-size – prakash

+1

Không phải vấn đề của tôi. Tôi không muốn chia tỷ lệ bitmap của mình chỉ để giảm kích thước trong bộ nhớ bằng cách thay đổi là quilaty. – dasdasd

+2

Có phải giải pháp được tìm thấy cho vấn đề này không? Tôi đang đối mặt với cùng một vấn đề ở đây. – Prateek

Trả lời

1

Sử dụng Bitmap.compress(), bạn chỉ cần chỉ định thuật toán nén và bởi cách hoạt động nén mất một lượng thời gian khá lớn. Nếu bạn cần phải chơi với kích thước để giảm phân bổ bộ nhớ cho hình ảnh của bạn, bạn chính xác cần phải sử dụng tỷ lệ hình ảnh của bạn bằng cách sử dụng Bitmap.Options, tính toán bitmap giới hạn lúc đầu tiên và sau đó giải mã nó đến kích thước quy định của bạn.

Mẫu tốt nhất mà tôi tìm thấy trên StackOverflow là cái này. Strange out of memory issue while loading an image to a Bitmap object

+2

Tôi không muốn chia tỷ lệ bitmap chỉ để giảm chất lượng. – dasdasd

4

Tiếp theo là mã để giảm kích thước bitmap và chuyển nó sang 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

Cảm ơn bạn đã bình luận nhưng tôi đã thử giải pháp khác mà không sử dụng kích thước thay đổi ... – dasdasd

Các vấn đề liên quan