项目里面看到一张图片占用内存很大,想优化一下
首先是用了glide,但是发现设置了format 跟不设置是一样的,非常不理解
后面又想用android 原生的API 来解析图片,以为这样就可以生效了
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap, options);
Log.i("bitmap", "name: " + bitmap.getConfig().name());
但通过内存分析发现无论我设置成什么占用内存大小都是一样的!!后面打印了bitmap 的config 才发现原来没改成功!
使用Glide 也是一样的效果
private void loadBitmap(int width, int height, ImageView imageView, int resId) {
Glide.with(this).load(resId).
asBitmap().format(DecodeFormat.PREFER_RGB_565).
override(dp2px(this, width), dp2px(this, height)).
into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Log.i("bitmap", "onResourceReady: " + resource.getConfig().name());
}
});
}
打印结果还是显示的是
网上的解决方案:
一、
private Bitmap convert(Bitmap bitmap, Bitmap.Config config) {
Bitmap convertedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
Canvas canvas = new Canvas(convertedBitmap);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawBitmap(bitmap, 0, 0, paint);
return convertedBitmap;
}
二、
Bitmap converted = original.copy(Config.RGB_565, false);
偶尔几张图片不能转换还好,但如果很多图片都不支持就很尴尬了,难道要放弃使用glide?目前还没找到哪些图片不支持转换的资料!