2015-04-04 2 views
0

Я пытаюсь сжать изображение и вывести размер сжатых и исходных изображений в Logcat (используя Bitmap.getAllocationByteCount()). Однако сжатые и оригинальные размеры изображений всегда одинаковы, несмотря на видимые изменения качества сжатого изображения. Я использую SDK Picasso для чтения изображений из ресурса и в конечном итоге загружаю растровое изображение, возвращаемое обратным вызовом в классе Target, в ImageView.Android - размер сжатых и несжатых изображений одинаковый

Вот мой код:

public class MainActivity extends ActionBarActivity { 

ImageView imageView1; 
private Target target; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imageView1 = (ImageView)findViewById(R.id.image_view_1); 

    target = new Target(){ 

     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 

      Log.v("BITMAP BEFORE",Integer.valueOf(bitmap.getAllocationByteCount()).toString()); 

      ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

      bitmap.compress(Bitmap.CompressFormat.JPEG,0,outputStream); 

      Bitmap decodedMap = BitmapFactory.decodeStream(new ByteArrayInputStream(outputStream.toByteArray())); 

      imageView1.setImageBitmap(decodedMap); 

      Log.v("BITMAP AFTER",Integer.valueOf(decodedMap.getAllocationByteCount()).toString()); 

     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

      Log.v("ON BITMAP FAILED", "ON BITMAP FAILED"); 
     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

      Log.v("ON PREPARE LOAD","ON PREPARE LOAD"); 
     } 
    }; 

    loadImage(); 
} 


private void loadImage(){ 

    Picasso.with(getApplicationContext()).load(R.drawable.smiley).into(target); 
} 
} 

Я пытался сжимать JPEGs и PNG с коэффициентом сжатия в 0, однако размеры всегда одинаковы. Что я делаю не так ? Наибольшее значение получили объяснение или даже решение. Я пытаюсь уменьшить размер растрового изображения до загрузки его в ImageView. Заранее спасибо.

Edit: Я попытался с помощью getByteCount() и getRowBytes() * getHeight() вместо getAllocationByteCount(), и результаты всегда одинаковы.

ответ

2

Однако сжатые и оригинальные размеры изображений всегда одинаковы, несмотря на видимые изменения качества сжатого изображения.

Размер в ОЗУ Bitmap не имеет никакого отношения к тому, сжимается ли изображение или качество изображения. Это зависит исключительно от разрешения (ширина, высота) и глубины бит. getAllocationByteCount() возвращает размер в ОЗУ Bitmap.

Сжатие и качество изображения влияют на размер на диске растрового изображения.