1. 使用decodeStream获取Bitmap
ImageView.setImageBitmap、ImageView.setImageResource、BitmapFactory.decodeResource: 通过Java层的createBitmap完成,消耗更多内存
BitmapFactory.decodeStream: JNI >> nativeDecodeAsset,更加节约内存
InputStream is = getResources().openRawResource(R.drawable.pic);
Bitmap bitmap = BitmapFactory.decodeStream(is);
注:decodeStream方法得到的Bitmap长宽是其他方法的1/2,等于原图的长宽像素值。具体原因不清楚。
2. Decode时使用BitmapFactory.Options参数
a)Options.inSampleSize, 成比例放缩
BitmapFactory.Options ops = new BitmapFactory.Options();
ops.inSampleSize = 2; // 取样比例,得到的结果长宽是原图的1/2
Bitmap bitmap = BitmapFactory.decodeStream(is, null, ops);
b)Options.inJustDecodeBounds,只获取长宽,不获取图片
BitmapFactory.Options ops = new BitmapFactory.Options();
ops.inJustDecodeBounds = true;