转自http://blog.youkuaiyun.com/ruiyiin/article/details/8675361
加载和显示图片是很消耗内存的一件事,BitmapFactory.Options 类, 允许我们定义图片以何种方式如何读到内存,
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inSampleSize = 8;
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);
imv.setImageBitmap(bmp);
上面的代码使图片变成原来的1/8.
//imv = (ImageView) findViewById(R.id.ReturnedImageView);
Display currentDisplay = getWindowManager().getDefaultDisplay();
int dw = currentDisplay.getWidth();
int dh = currentDisplay.getHeight();
try
{
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().
openInputStream(imageFileUri), null, bmpFactoryOptions);
int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);
int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);
Log.v("HEIGHRATIO", ""+heightRatio);
Log.v("WIDTHRATIO", ""+widthRatio);
if (heightRatio > 1 && widthRatio > 1)
{
bmpFactoryOptions.inSampleSize = heightRatio > widthRatio ? heightRatio:widthRatio;
}
bmpFactoryOptions.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(getContentResolver().
openInputStream(imageFileUri), null, bmpFactoryOptions);
returnedImageView.setImageBitmap(bmp);
}
catch (FileNotFoundException e)
{
Log.v("ERROR", e.toString());
}
上面的代码让图片根据窗口大小改变
bmpFactoryOptions.inJustDecodeBounds = true; 这一行让代码只解码图片的Bounds
本文介绍如何使用BitmapFactory.Options减少图片加载时的内存占用,并提供了一种根据屏幕尺寸调整图片大小的方法。
1962

被折叠的 条评论
为什么被折叠?



