我正在尝试压缩图像并将压缩和原始图像的大小输出到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(),结果始终相同。
答案 0 :(得分:2)
然而,尽管压缩图像质量有明显变化,但压缩和原始图像大小始终相同。
Bitmap
的RAM大小与图像是否被压缩或图像质量无关。它仅取决于分辨率(宽度,高度)和位深度。 getAllocationByteCount()
返回Bitmap
的内存大小。
压缩和图像质量会影响位图图像的磁盘。