Я пытаюсь сжать изображение и вывести размер сжатых и исходных изображений в 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(), и результаты всегда одинаковы.