Android - 压缩和未压缩图像的大小相同

时间:2015-04-04 11:19:19

标签: android bitmap compression

我正在尝试压缩图像并将压缩和原始图像的大小输出到Logcat(使用Bitmap.getAllocationByteCount())。但是,尽管压缩图像质量有明显变化,但压缩和原始图像大小始终相同。我正在使用Picasso SDK从资源中读取图像,并最终将Target类中的回调返回的位图加载到ImageView

这是我的代码:

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

我尝试使用0压缩因子压缩JPEG和PNG,但是大小始终相同。我究竟做错了什么 ?最理解的是解释甚至解决方案。我想在将Bitmap加载到ImageView之前减小它的大小。提前谢谢。

编辑: 我尝试使用getByteCount()getRowBytes() * getHeight()代替getAllocationByteCount(),结果始终相同。

1 个答案:

答案 0 :(得分:2)

  

然而,尽管压缩图像质量有明显变化,但压缩和原始图像大小始终相同。

Bitmap的RAM大小与图像是否被压缩或图像质量无关。它仅取决于分辨率(宽度,高度)和位深度。 getAllocationByteCount()返回Bitmap的内存大小。

压缩和图像质量会影响位图图像的磁盘