由于机器内存的限制,加载大图片时有时候系统会崩溃
必须根据屏幕的宽高进行比例缩放的显示,核心代码如下所示
public void onClickLoadBigPic(View v){
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
/*Bitmap bm = BitmapFactory.decodeFile("sdcard/bigpicture.jpg");//这样直接加载大图片系统会崩溃
if(bm != null)
{
System.out.println("onClickLoadBigPic BitmapFactory.decodeFile success -------------");
ImageView imageView = (ImageView) findViewById(R.id.ivImageView);
imageView.setImageBitmap(bm);
}
else {
System.out.println("onClickLoadBigPic BitmapFactory.decodeFile failed -------------");
}*/
/**
* 上述直接加载大图片系统会崩溃,下面的方法是按照屏幕和图片宽高的比例进行缩放来加载图片
*/
Options options = new Options();
//不为像素申请内存,只获取图片宽高
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile("sdcard/bigpicture.jpg", options);
int imageWidth = options.outWidth;
int imageHeight = options.outHeight;
System.out.println("picture " + imageWidth + " " + imageHeight);
//计算屏幕宽高
Display dpDisplay = getWindowManager().getDefaultDisplay();
int screenWidth = dpDisplay.getWidth();
int screenHeight = dpDisplay.getHeight();
System.out.println("screen " + screenWidth + " " + screenHeight);
//计算缩放比例
int scale = 1;
int scaleWidth = imageWidth / screenWidth;
int scaleHeight = imageHeight / screenHeight;
if(scaleWidth >= scaleHeight && scaleWidth >= 1){
scale = scaleWidth;
}
else if(scaleWidth < scaleHeight && scaleHeight >= 1){
scale = scaleHeight;
}
System.out.println("scale " + scale);
//设置缩放比例
options.inSampleSize = scale;
options.inJustDecodeBounds = false;
Bitmap bmBitmap = BitmapFactory.decodeFile("sdcard/bigpicture.jpg", options);
ImageView ivImageView = (ImageView) findViewById(R.id.ivImageView);
ivImageView.setImageBitmap(bmBitmap);
}
}